9
@blep #DevoxxFrJpa JDBC / JPA / Hibernate: Sans maîtrise la puissance n’est rien! Brice LEPORINI @blep Indépendant http://the-babel-tower.github.io/

Devoxx 15

Embed Size (px)

Citation preview

@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

23

• 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