3. @blep#DevoxxFrJpa
JPA: Recette de base
<persistence
<
<
<
value=
<
<
value=
<
<
<
value=
</
</
</persistence
@Entity
@Getter @Setter
@EqualsAndHashCode(exclude =
public class
@Id
@Column(unique =
}
EntityManagerFactory emf =
Persistence.createEntityManagerFactory(
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
final
user.setName(
em.getTransaction().commit();
1
2
3
• Verser 50g de configuration XML dans META-INF
• Délayer 40g d’annotation dans chaque POJO pour
le mappage
• Mettre une implémentation dans le Class Path
• Démarrer l’unité de persistance pour faire prendre
le tout
• C’est prêt!
5. @blep#DevoxxFrJpa
Cache L1
• Ou cache de session
• Scalabilité!
• Attention au cache obsolète entre les sessions:
• Sessions longues (batches, Stateful)
• Transactions indépendantes:
Tx REQUIRED[ ... Tx REQUIRES_NEW [ ..... ] .... ]
6. @blep#DevoxxFrJpa
N+1 @OneToOne
• Java ne permet pas de «proxifier» la valeur null
• Le choix de la propriété (ownership) de la relation est donc
primordial
• Alternatives
• Fusion
• Héritage
•@Embeddable
7. @blep#DevoxxFrJpa
Interrogation
• Inline: Jamais (ou tests)
• Named Queries / Repo Spring Data: requêtes statiques
• API Criteria:
• Non typée: Jamais
• Meta-modèle: Requêtes construites dynamiquement