Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

pdf / 3-jpa

.pdf
Скачиваний:
22
Добавлен:
06.06.2015
Размер:
170.47 Кб
Скачать

Java Persistence API

Object/relational mapping

POJO (Plain Old Java Object)

Часть EJB 3.0

Состоит из:

The Java Persistence API

The query language

Object/relational mapping metadata

Три наиболее известные реализации

Hibernate (JBoss/RedHat)

Toplink (Oracle)

Kodo (Weblogic)

Требования (@Entity)

Entity annotation (или XML descriptor)

no-arg constructor (public или protected)

Не должен быть final (как и его persistent методы и поля)

Для передачи из/в Remote методы должны реализовать Serializable

Поля должны быть уровня доступа private, protected, or package

Необходимы get и set методы для доступа к полям

Требования (@Entity)

Field-based или property-based access (Transient аннотация для исключения)

Первичный ключ

Возможны свойства типов:

Примитивные типы

Serializable types (cтроки, обертки над примитивными типами, ...)

Enumerated types

Другие entities и/или коллекции entities (Collection, Set, List, Map - поддерживаются Generic)

Embeddable classes

Primary Key (@Id)

Поддерживаемые типы

Java primitive types

Java primitive wrapper types

java.lang.String

java.util.Date и java.sql.Date

Поддерживаются Compisite Primary Key (@EmbeddedId @IdClass )

Нельзя использовать типы с плавающей точкой

Автогенерация переносима только для интегральных типов

Composite Primary Key Class

Public Class

Public default конструктор

Public (protected) properties

Должен корректно определять hashCode() & equals()

Serializable

@Embeddable public class ItemId implements Serializable { private String firstName, lastName;

...}

@Entity public class Item implements Serializable { @EmbeddedId private ItemId id;

...}

Relationships

One-to-one

One-to-many

Many-to-one

Many-to-many

Есть понятие владельца связи

Могут быть

Bidirectional

Unidirectional

One-to-many bidirectional

@Entity public class Employee { private Department department;

//Entity Employee is the owner of the relationship. EMPLOYEE.DEPARTMENT_ID

@ManyToOne

public Department getDepartment() { return department;

}

public void setDepartment(Department department) { this.department = department;

}...

}

@Entity public class Department {

private Collection<Employee> employees = new HashSet();

@OneToMany(mappedBy="department") public Collection<Employee> getEmployees() {

return employees;

}

public void setEmployees(Collection<Employee> employees) { this.employees = employees;

}...

}

Entity Inheritance

Возможно наследование Entites

The Single Table per Class Hierarchy Strategy

The Table per Concrete Class Strategy

The Joined Subclass Strategy

Полиморфизм (в ассоциациях и запросах)

Entity может быть абстрактным классом

Возможно наличие в иерархии классов не Entity классов

Понятие Mapped Superclasses. От него можно наследоваться, но он сам не является Entity

Возможные варианты

Abstract Entities – не могут быть напрямую созданы

Non-Entity Superclasses – их состояние не сохраняется в базу, аннотации (если они есть) игнорируются

@MappedSuperclass - для выражения общего состояния разных сущностей

@Inheritance(strategy=Inheritan ceType.SINGLE_TABLE)

Вся иерархия классов хранится в одной таблице

Есть колонка @DiscriminatorColumn (по умолчанию DTYPE)

Сильные стороны:

Высокая производительность

Хорошая поддержка полиморфизма

Недостатки

Рост числа колонок в таблице

Необходимость значений по умолчанию или nullable полей для всех потомков

Соседние файлы в папке pdf