Skip to content

Instantly share code, notes, and snippets.

@hedza06
Forked from jahe/jpa-cheatsheet.java
Created January 8, 2020 12:36
Show Gist options
  • Select an option

  • Save hedza06/5275e457ebca702a4a59784bdb529ebf to your computer and use it in GitHub Desktop.

Select an option

Save hedza06/5275e457ebca702a4a59784bdb529ebf to your computer and use it in GitHub Desktop.
JPA Cheatsheet
JPA (Java Persistence API)
Transaction Management with an Entity-Mananger:
---
entityManager.getTransaction().begin();
entityManager.persist(<some-entity>);
entityManager.getTransaction().commit();
entityManager.clear();
SomeEntity entity = entityManager.find(SomeEntity.class, 1);
---
@OneToOne's fetch type is EAGER by default
Lists + Sets fetch type is LAZY by default
Two types of Lazy Loading implementations
1. Proxying the object (default in Hibernate) by creating a Subclass of that object at runtime and overwrite the get methods.
This is done by the JavaAssist lib.
2. ByteCode Enhancement (default in EclipseLink): Add special logic to the get methods inside the Java Bytecode
LazyInitializationExcepiton:
Entity Lifecycle
New ---> em.persist ---> Managed
New ---> em.merge ---> Managed
Managed ---> em.remove ---> Removed
Managed ---> em.find ---> Managed
Managed ---> query.getResultList ---> Managed
Managed ---> query.getSingleResult ---> Managed
Managed ---> em.detach ---> Detached
Managed ---> em.close ---> Detached
Managed ---> em.clear ---> Detached
Detached ---> em.merge ---> Managed
Ein neu angelegtes Entity Object ist im Zustand "New".
Managed - Es gibt einen Entity-Manager, der für dieses Objekt verantwortlich ist:
Vorteile: - Es werden automatisch Änderungen getrackt.
Beim nächsten Transaktions-Commit werden nur die Änderungen in die DB geschrieben.
Lazy Loading funktioniert
Detached - Lazy Loading muss nicht zwangsweise funktionieren
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment