More Related Content Similar to Java Persistence API (JPA) Basics (20) Java Persistence API (JPA) Basics1. Java Persistence API (JPA):
ΠΡΠ½ΠΎΠ²Ρ
ΠΠ½Π΄ΡΠ΅ΠΉ Π ΠΎΠ΄ΠΈΠΎΠ½ΠΎΠ²
(Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠ² ΠΠΈΡ
Π°ΠΈΠ»Π° ΠΠ°ΠΉΡΠΌΠ°Π½Π°)
1
2. Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅
β’ Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΈ ΠΠΎΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ O/R Mapper (ORM)?
β’ Π§ΡΠΎ Π½Π°ΠΌ Π΄Π°Π΅Ρ JPA?
β’ O/R ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
β’ Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Entity?
β’ ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ JPA
β’ EntityManager ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Entity
β’ ΠΠΈΠ·Π½Π΅Π½Π½ΡΠΉ ΡΠΈΠΊΠ» Entity
2
3. ΠΠΎΡΠ΅ΠΌΡ Object/Relational Mapping?
β’ ΠΠ΄Π½Π° ΠΈΠ· Π³Π»Π°Π²Π½ΡΡ
ΡΠ°ΡΡΠ΅ΠΉ Π»ΡΠ±ΠΎΠ³ΠΎ ΡΠ½ΡΠ΅ΡΠΏΡΠ°ΠΉΠ·
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ β ΡΡΠΎΠ²Π΅Π½Ρ persistence
β ΠΠΎΡΡΡΠΏ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠΌΠ°Π½Π΅Π½ΡΠ½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ, ΠΎΠ±ΡΡΠ½ΠΎ
Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΠΎΠΉ ΠΠ
β’ ORM Π±Π΅ΡΠ΅Ρ Π½Π° ΡΠ΅Π±Ρ βΠΏΡΠ΅Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅β ΡΠ°Π±Π»ΠΈΡΡ Π²
ΠΎΠ±ΡΠ΅ΠΊΡ
β ΠΠ°Π½Π½ΡΠ΅ ΠΆΠΈΠ²ΡΡ Π² ΡΠ΅Π»ΡΡΠΈΠΎΠ½Π½ΠΎΠΉ ΠΠ, Ρ.Π΅. Π² ΡΠ°Π±Π»ΠΈΡΠ°Ρ
(Π²
ΡΡΡΠΎΡΠΊΠ°Ρ
ΠΈ ΡΡΠΎΠ»Π±ΡΠ°Ρ
)
β ΠΡ ΠΆΠ΅ Ρ
ΠΎΡΠΈΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ, Π° Π½Π΅ Ρ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°ΠΌΠΈ ΠΈ
ΡΡΠΎΠ»Π±ΡΠ°ΠΌΠΈ
3
4. Π§ΡΠΎ Π½Π°ΠΌ Π΄Π°Π΅Ρ JPA?
β’ Π£ΠΏΡΠΎΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ persistens
> ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΠΌΠ΅ΡΡΠΎ
ΡΠ»ΠΎΠΆΠ½ΡΡ
Π½Π°ΡΡΡΠΎΠ΅ΠΊ
> ΠΡΠΊΠ°Π· ΠΎΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ²
β’ ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π»Π΅Π³ΠΊΠΎΠ²Π΅ΡΠ½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ persistence
> Π£Π²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ Π±ΡΡΡΡΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ
β’ ΠΠ΄ΠΈΠ½ΡΠΉ API Π΄Π»Ρ Java SE ΠΈ Java EE
4
5. You'll need three artifacts to implement a
JPA-compliant program
β’ An entity class
β’ A persistence.xml file
β’ A class through which you will insert, update, or find
an entity
5
6. O/R ΠΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
β’ ΠΠ±ΡΠΈΡΠ½ΡΠΉ Π½Π°Π±ΠΎΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΉ Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ
ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ (mapping)
> Π‘Π²ΡΠ·ΠΈ
> ΠΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ
> Π’Π°Π±Π»ΠΈΡΡ ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ ΠΠ
> ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ Π΄Π»Ρ ΠΠ
> ΠΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅
β’ ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ
ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΡΠ°ΠΉΠ» Π΄Π»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ
ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ (mapping)
6
7. Order
ΠΡΠΈΠΌΠ΅Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈ
int id
Customer M Customer cust
...
1
int id
String name
int c_rating
Image photo
Set<Order> orders M
Collection<Phone>
phones
Phone
...
int id
Collection<Customer>
N custs
...
7
8. ΠΡΠΈΠΌΠ΅Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
CUSTOMER
ID NAME CREDIT PHOTO
@Entity(access=FIELD)
public class Customer {
@Id
int id;
String name;
@Column(name=βCREDITβ)
int c_rating;
@Lob
Image photo;
}
Π£ΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ:
ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ
ΡΠ°ΡΡ
ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π² ΠΈΠΌΠ΅Π½Π°Ρ
. 8
9. ΠΡΠΈΠΌΠ΅Ρ Entity
@Entity
public class Customer implements Serializable {
@Id protected Long id;
protected String name;
@Embedded protected Address address;
protected PreferredStatus status;
@Transient protected int orderCount;
public Customer() {}
public Long getId() {return id;}
protected void setId(Long id) {this.id = id;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
β¦
}
9
10. ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Entity
β’ ΠΡΠ±ΠΎΠΉ Entity ΠΈΠΌΠ΅Π΅Ρ ΠΏΠ΅ΡΠΌΠ°Π½Π΅Π½ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ
> ΠΠ½ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π² ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ Π² ΡΠ°Π±Π»ΠΈΡΠ΅
β’ ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ β ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠΉ ΡΠΈΠΏ
> @IdβΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅/ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π² Entity ΠΊΠ»Π°ΡΡΠ΅
> @GeneratedValueβΠ·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡΡ
Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ
(SEQUENCE, TABLE, IDENTITY, AUTO)
β’ ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ β ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΊΠ»Π°ΡΡ
> @EmbeddedIdβΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅/ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π² Entity ΠΊΠ»Π°ΡΡΠ΅
> @IdClassβΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Ρ ΠΏΠΎΠ»Π΅ΠΉ Π² Entity
ΠΊΠ»Π°ΡΡΠ΅
10
11. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ JPA
β’ Entity ΡΡΠΎ ΠΏΡΠΎΡΡΠΎΠΉ Java ΠΊΠ»Π°ΡΡ (POJO)
β’ ΠΠ»Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΊΠ»Π°ΡΡ ΠΊΠ°ΠΊ Entity ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ
Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ
@Entity
public class Employee {
// Persistent/transient fields
// Property accessor methods
// Persistence logic methods
}
11
13. EntityManager
β’ Π£ΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΆΠΈΠ·Π½Π΅Π½Π½ΡΠΌ ΡΠΈΠΊΠ»ΠΎΠΌ Entity ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ²
> persist() - ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ Π² ΠΠ
> remove() - ΡΠ΄Π°Π»ΡΠ΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠ· ΠΠ
> merge() - ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΠ΅Ρ Ρ ΠΠ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅
ΠΎΡΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
> refresh() - ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΠΈΠ· ΠΠ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
13
14. ΠΠΏΠ΅ΡΠ°ΡΠΈΡ Persist
public Order createNewOrder(Customer customer) {
// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ
Order order = new Order(customer);
// ΠΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π° ΠΌΠ΅ΡΠΎΠ΄Π° persist() ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠ΅Π½ΡΠ΅Ρ ΡΠ²ΠΎΠΉ
// ΡΡΠ°ΡΡΡ Π½Π° ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΉ. ΠΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ
// ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π·Π°ΠΏΠΈΡΠΈ Π² ΠΠ ΠΎΠ±Π΅ΠΊΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ Π² ΠΠ.
entityManager.persist(order);
return order;
}
14
15. ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ Find ΠΈ Remove
public void removeOrder(Long orderId) {
Order order =
entityManager.find(Order.class, orderId);
// ΠΠ±ΡΠ΅ΠΊΡ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π°Π»Π΅Π½ ΠΈΠ· ΠΠ ΠΏΡΠΈ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ
// ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π·Π°ΠΏΠΈΡΠΈ Π² ΠΠ. ΠΠΎΡΡΡΠΏ ΠΊ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌΡ
// ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π½Π΅ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΡΠΌ
// ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ.
entityManager.remove(order);
}
15
16. ΠΠΏΠ΅ΡΠ°ΡΠΈΡ Merge
public OrderLine updateOrderLine(OrderLine orderLine) {
// ΠΠ΅ΡΠΎΠ΄ merge Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ ΠΊΠΎΠΏΠΈΡ
// ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΡΡΠΎΠ΄ΠΈΠ½Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. ΠΡΠ»ΠΈ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅
// ΠΎΡΡΠΎΠ΅Π΄ΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π±ΡΠ»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ, ΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ
// Π±ΡΠ΄ΡΡ ΠΎΡΡΠ°ΠΆΠ΅Π½Ρ Π² Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ.
return entityManager.merge(orderLine);
}
16
18. ΠΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ EntityManager
β’ Π Π°Π·Π½ΡΠ΅ ΡΠΈΠΏΡ EntityManager ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΏΠΎ ΡΠ°Π·Π½ΠΎΠΌΡ
> Π£ΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠΌ EntityManager (Java EE)
ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠΌ ΠΈ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ Π΄Π»Ρ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΠΈΠ½ΡΠ΅ΠΊΡΠΈΠΉ ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ
Π°Π½Π½ΠΎΡΠ°ΡΠΈΡ @PersistenceContext.
> Π£ΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΉ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ EntityManager (Java SE)
ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΈ Π·Π°ΠΊΡΡΠ²Π°Π΅ΡΡΡ (ΡΠ½ΠΈΡΡΠΎΠΆΠ°Π΅ΡΡΡ)
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.
18