// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Использование поддержки JPA Support с EclipseLink
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Использование поддержки JPA Support с EclipseLink - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Использование поддержки JPA Support с EclipseLink

|===
|A video tutorial on how to handle Java Persistence API support using EclipseLink in the IDE NetBeans. Демо-ролик разделен на две части; в первой демонстрируются способы использования поддержки EclipseLink с использованием подсказок редактора и реорганизации кода. Во второй части описывается способ создания классов сущностей из базы данных.

Автор: Трой Гюниперо (Troy Giunipero)
Продолжительность: 12:23

link:http://bits.netbeans.org/media/eclipselink-demo.flv[+Загрузить+] [44,3 МБ]

link:/about/contact_form.html?to=3&subject=Feedback: JPA EclipseLink Screencast[+Отправить отзыв по этому учебному курсу+]
 
|===

  

