Post on 16-Apr-2020
Advanced Topics in JPA
Petr Kremen
petr.kremen@fel.cvut.cz
Winter Term 2017
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 1 / 71
Contents
1 Embedded Objects
2 Mapping to legacy databases
3 Cascades
4 Collection Mapping
5 Compound and Shared Keys
6 Compound Join Columns
7 Various Attributes and Access Types
8 Queries
9 Criteria API
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 2 / 71
Embedded Objects
Embedded Objects
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 3 / 71
Embedded Objects
Embedded Objects
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 4 / 71
Embedded Objects
Embedded Objects
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 5 / 71
Embedded Objects
Embedded Objects
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 6 / 71
Embedded Objects
Embedded Objects
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 7 / 71
Mapping to legacy databases
Mapping to legacy databases
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 8 / 71
Mapping to legacy databases
How to map legacy databases
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 9 / 71
Mapping to legacy databases
How to map legacy databases
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 10 / 71
Cascades
Cascades
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 11 / 71
Cascades
Cascade-persist
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 12 / 71
Cascades
Persisting bidirectional relationship
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 13 / 71
Cascades
Cascade
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 14 / 71
Collection Mapping
Collection Mapping
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 15 / 71
Collection Mapping
Collection Mapping
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 16 / 71
Collection Mapping
Collection Mapping
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 17 / 71
Collection Mapping
Collection Mapping
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 18 / 71
Collection Mapping
Collection Mapping
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 19 / 71
Collection Mapping
Collection Mapping
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 20 / 71
Collection Mapping
Collection Mapping
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 21 / 71
Collection Mapping
Collection Mapping - Ordered List
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 22 / 71
Collection Mapping
Collection Mapping - Ordered List
Figure: Ordering by Entity or Element Attribute
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 23 / 71
Collection Mapping
Collection Mapping - Ordered List
Figure: Ordering by Entity or Element Attribute
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 24 / 71
Collection Mapping
Collection Mapping - Ordered List
Figure: Persistently ordered lists
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 25 / 71
Collection Mapping
Collection Mapping - Ordered List
Figure: Persistently ordered lists
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 26 / 71
Collection Mapping
Collection Mapping - Maps
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 27 / 71
Collection Mapping
Collection Mapping - Maps
Figure: Keying by basic type - key is String
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 28 / 71
Collection Mapping
Collection Mapping - Maps
Figure: Keying by basic type - key is an enumeration
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 29 / 71
Collection Mapping
Collection Mapping - Maps
Figure: Keying by basic type - 1:N relationship using a Map with String key
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 30 / 71
Collection Mapping
Collection Mapping - Maps
Figure: Keying by basic type - N:M relationship using a Map with String key
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 31 / 71
Collection Mapping
Collection Mapping - Maps
Figure: Keying by entity attribute
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 32 / 71
Collection Mapping
Collection Mapping - Maps
Figure: Keying by embeddable type
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 33 / 71
Collection Mapping
Collection Mapping - Maps
Figure: Keying by embeddable type
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 34 / 71
Collection Mapping
Collection Mapping - Maps
Figure: Keying by embeddable type
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 35 / 71
Collection Mapping
Collection Mapping - Maps
Figure: Keying by embeddable type
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 36 / 71
Collection Mapping
Collection Mapping - Maps
Figure: Keying by embeddable type
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 37 / 71
Collection Mapping
Collection Mapping - Maps
Figure: Keying by entity
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 38 / 71
Compound and Shared Keys
Compound and Shared Keys
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 39 / 71
Compound and Shared Keys
Compound primary keys
Figure: Id Class
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 40 / 71
Compound and Shared Keys
Compound primary keys
Figure: Embedded Id Class
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 41 / 71
Compound and Shared Keys
Compound primary keys
Figure: Embedded Id Class
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 42 / 71
Compound and Shared Keys
Shared Primary Key
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 43 / 71
Compound and Shared Keys
Shared Primary Key
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 44 / 71
Compound Join Columns
Compound Join Columns
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 45 / 71
Compound Join Columns
Compound Join Columns
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 46 / 71
Compound Join Columns
Compound Join Columns
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 47 / 71
Various Attributes and Access Types
Various Attributes and AccessTypes
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 48 / 71
Various Attributes and Access Types
Read-only mappings
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 49 / 71
Various Attributes and Access Types
Optionality
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 50 / 71
Various Attributes and Access Types
Access types - Field access
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 51 / 71
Various Attributes and Access Types
Access types - Property access
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 52 / 71
Various Attributes and Access Types
Access types - Mixed access
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 53 / 71
Various Attributes and Access Types
Access types - Mixed access
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 54 / 71
Queries
Queries
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 55 / 71
Queries
Queries
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 56 / 71
Queries
JPQL
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 57 / 71
Queries
JPQL - query parameters
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 58 / 71
Queries
JPQL - defining a query dynamically
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 59 / 71
Queries
JPQL - using parameters
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 60 / 71
Queries
JPQL - named queries
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 61 / 71
Queries
JPQL - named queries
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 62 / 71
Queries
JPQL - pagination
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 63 / 71
Queries
JPQL - bulk updates
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 64 / 71
Queries
Native (SQL) queries
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 65 / 71
Queries
Native (SQL) queries
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 66 / 71
Queries
Native (SQL) queries
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 67 / 71
Criteria API
Criteria API
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 68 / 71
Criteria API
Criteria API
JPQL
SELECT e FROM Employee e WHERE e.surname=’Novak’
Criteria API
Metamodel m = em.getMetamodel();CriteriaBuilder cb =em.getCriteriaBuilder();
CriteriaQuery<Employee> cq =cb.createQuery(Employee.class);
EntityType<Employee> Employee_ =m.entity(Employee.class);
Root<Employee> r =cq.from(Employee_);
cq.where(r.get(Employee_.surname).in("Novak"))
em.createQuery(cq).getResultList();
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 69 / 71
Criteria API
The End
Thank You
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 70 / 71
Criteria API
Resources
JSR 338 Java Persistence 2.1 Final Releasehttp://jcp.org/aboutJava/communityprocess/final/jsr338/index.html
Petr Kremen (petr.kremen@fel.cvut.cz) Advanced Topics in JPA Winter Term 2017 71 / 71