Занятие №9
ORM JPA HIBERNATE
Владимир
Лебедко
Обо мне
Лебедко Владимир
ведущий разработчик
компания "Сибирские Интеграционные Системы"
Опыт работы:
- с 2009 года
Технологии, с которыми работал:
- Базы данных: PostgreSQL, Intersystem Cache
- Бэкэнд: Cache(COS), Java (Spring, SpringData, Hibernate,Apache Camel, ActiveMQ), C#
- Фронтэнд: ActionScript (Flex), JavaScript
ORM
Object relation mapping
Реляционное представление
Доменная модель
JPA
java persistence api
JPA
Спецификация
Вошла в EJB3
Первая версия JPA была выпущена 11 мая 2006 года
Текущая версия JPA 2.1 22 апреля 2013 года
JPA
- API (интерфейсы)
- Метаданные (Аннотации)
- JPQL (Язык запросов)
Основные интерфейсы
Persistence
<persistence ... version="2.0">
<persistence-unit name="my-pu">
<description>My Persistence Unit</description>
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<mapping-file>META-INF/mappingFile.xml</mapping-file>
<jar-file>packedEntity.jar</jar-file>
<class>sample.Book</class>
....
<properties>
<property name="javax.persistence.jdbc.driver" value="org.h2.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:test" />
<property name="javax.persistence.jdbc.user" value="sa" />
<property name="javax.persistence.jdbc.password" value="123" />
...
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<property name="hibernate.hbm2ddl.auto" value="validate" />
<property name="show_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>
Persistance.xml
hibernate.hbm2ddl.auto
- validate: Проверяет существующую схему в СУБД
- update: Обновляет схему, добавляя новые элементы.
- create: Полностью пересоздает схему в СУБД
- create-drop: Удаляет схему при остановке приложения
mappingFile.xml
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings
xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"
version="2.0">
<entity class="samples.Book"
access="FIELD" name="Book">
<attributes>
<id name="id"/>
<basic name="book_name"/>
<basic name="author_id"/>
</attributes>
</entity>
</entity-mappings>
конфигурация Spring boot
spring.datasource.url=jdbc:h2:file:./data/jokes
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.h2.console.enabled=true
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.H2Dialect
Аннотации
Над сущностями
-
@Entity
-
@Table(name = "Book")
Над полями
- @Column(name = "book_name")
- @Id ,@GeneratedValue
- @Transient
Аннотации отношений
1-* / *-1
@Entity
@Table(name = "book")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "book_name")
private String bookName;
@ManyToOne
@JoinColumn(name = "author_id")
private Author author;
@OneToMany(mappedBy = "book", fetch = FetchType.LAZY)
private List<Page> pages;
}
@ManyToOne @OneToMany
Требования к модели
- POJO
- Должен иметь пустой конструктор (public или protected)
- Не может быть final и не может содержать final-полей/свойств
- Поля должны быть доступны только через getter/setter
- Должен содержать хотя бы одно @Id-поле
- Атрибуты коллекций обязательно в терминах интерфейсов
- Не может быть вложенным классом, интерфейсом или enum
Состояния объекта
- new
- managed
- detached
- removed
JPQL
Query query = entitymanager.createQuery("from Book");
List<Book> list=query.getResultList();
Hibernate
SessionFactory - EntityManagerFactory
Session - EntityManager
HQL - JPQL
Вопросы
JavaSIS #2.19 Занятие 9
By lvm444
JavaSIS #2.19 Занятие 9
- 317