@blep#DevoxxFrJpa
JDBC / JPA / Hibernate: Sans
maîtrise la puissance n’est rien!
Brice LEPORINI
@blep
Indépendant
http://the-babel-tower.github.io/
@blep#DevoxxFrJpa
Présentation
• JDBC: Interface d’échange avec les SGBD
• Hibernate: ORM, né en 2002 des frustrations des EJB2 entities
• JPA: Spécification du JCP. Hibernate implémente JPA.
@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!
@blep#DevoxxFrJpa
Pourquoi revenir dessus en 2015?
• Technologie largement utilisée dans les applications Java
• Extrêmement rarement maîtrisée...
@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 [ ..... ] .... ]
@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
@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
@YourTwitterHandle@YourTwitterHandle@blep#DevoxxFrJpa
Sans maitrise la puissance n’est rien!
@blep#DevoxxFrJpa
Références
• JSR 338: JavaTM Persistence 2.1: https://jcp.org/en/jsr/detail?
id=338
• Documentation Hibernate http://hibernate.org/orm/
documentation/
• Patrycja Wegrzynowicz: Performance Anti-Patterns in
Hibernate: https://parleys.com/play/514892290364bc17fc56c48b
• Ippon :Formation JPA Avancé / Hibernate http://
fr.slideshare.net/ippontech/jpa-avanc-hibernate

Devoxx 15

  • 1.
    @blep#DevoxxFrJpa JDBC / JPA/ Hibernate: Sans maîtrise la puissance n’est rien! Brice LEPORINI @blep Indépendant http://the-babel-tower.github.io/
  • 2.
    @blep#DevoxxFrJpa Présentation • JDBC: Interfaced’échange avec les SGBD • Hibernate: ORM, né en 2002 des frustrations des EJB2 entities • JPA: Spécification du JCP. Hibernate implémente JPA.
  • 3.
    @blep#DevoxxFrJpa JPA: Recette debase <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!
  • 4.
    @blep#DevoxxFrJpa Pourquoi revenir dessusen 2015? • Technologie largement utilisée dans les applications Java • Extrêmement rarement maîtrisée...
  • 5.
    @blep#DevoxxFrJpa Cache L1 • Oucache 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 • Javane 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
  • 8.
  • 9.
    @blep#DevoxxFrJpa Références • JSR 338:JavaTM Persistence 2.1: https://jcp.org/en/jsr/detail? id=338 • Documentation Hibernate http://hibernate.org/orm/ documentation/ • Patrycja Wegrzynowicz: Performance Anti-Patterns in Hibernate: https://parleys.com/play/514892290364bc17fc56c48b • Ippon :Formation JPA Avancé / Hibernate http:// fr.slideshare.net/ippontech/jpa-avanc-hibernate