Changements de comportement dans Java Persistence API 2.1

Si vous utilisez déjà la fonction jpa-2.0 pour vos applications, continuez d'utiliser la fonction jpa-2.0 pour vos applications existantes afin d'éviter les problèmes de migration. Pour les nouvelles applications, il est préférable d'utiliser la fonction jpa-2.1, qui vous permet de bénéficier des nouvelles fonctions disponibles dans la spécification JPA 2.1. Si vous souhaitez modifier vos applications existantes pour qu'elles utilisent la fonction jpa-2.1 au lieu de la fonction jpa-2.0, il sera éventuellement nécessaire de régler votre application lors du processus de migration.

Différences entre jpa-2.0 et jpa-2.1

Il existe quelques différences majeures entre la fonction jpa-2.0 et la fonction jpa-2.1. A savoir :

Différences au niveau du nom de classe PersistenceProvider
jpa-2.0
  • Fournisseur IBM® :com.ibm.websphere.persistence.PersistenceProviderImpl
  • Fournisseur OpenJPA : org.apache.openjpa.persistence.PersistenceProviderImpl
jpa-2.1
  • org.eclipse.persistence.jpa.PersistenceProvider
Différences au niveau du comportement de la mise en cache

jpa-2.0 : La mise en cache est désactivée par défaut. Si votre application a besoin de bénéficier d'une antémémoire L2, vous devez l'activer de façon explicite.

jpa-2.1 : Par défaut, le fournisseur EclipseLink a l'antémémoire L2 et QueryCache activés. Vous devez vous assurer que ce paramètre est la meilleure option pour vos applications. Si vous opérez dans un environnement distribué, tel qu'un cluster, vous devez désactiver le cache ou prendre en compte que différents noeuds peuvent avoir des données différentes.

Améliorations / différences de tissage

jpa-2.0 : OpenJPA nécessite des entités améliorées. Pour plus d'informations, voir Extension des entités JPA pour JPA 2.0 dans la documentation produit.

jpa-2.1 : EclipseLink travaille avec des entités non améliorées. WebSphere Application Server prend en charge l'amélioration statique.

Certaines fonctions risquent de ne pas être disponibles, comme la fonction de chargement différé ainsi que certains gains de performance.

  • Si les classes d'entités sont améliorées statiquement pour une utilisation avec le fournisseur jpa-2.0 (OpenJPA), les classes doivent être recompilées avant d'utiliser le fournisseur jpa-2.1.
  • Si Liberty est configuré pour utiliser la fonction jpa-2.1 et les entités sont étendues à l'aide de l'extension OpenJPA, l'erreur suivante est émise :
    java.lang.NoClassDefFoundError: 
    org.apache.openjpa.enhance.PersistenceCapable.
  • L'erreur NoClassDefFoundError se produit car les classes OpenJPA ne sont pas disponibles pour le serveur au moment de l'exécution lorsque le serveur Liberty est configuré pour utiliser jpa-2.1.
    • Pour résoudre ce problème, recompilez l'application et assurez-vous que les entités ne sont pas étendues avec l'extenseur OpenJPA. Vous pouvez ne pas étendre les entités ou étendre les entités à l'aide de l'extension EclipseLink au lieu de l'extension OpenJPA.
    • Vous pouvez également laisser les entités dans leur état étendu et reconfigurer Liberty de manière à utiliser la fonction jpa-2.0. Certaines fonctionnalités de JPA 2.1 seront alors perdues.
Différences d'utilisation des sources de données

La fonction jpa-2.0 utilise les sources de données non JTA avec modération, de sorte que peu de connexions de sources de données non JTA sont requises lorsque vous optimisez une application.

La fonction jpa-2.1 utilise une connexion aux sources de données non JTA lorsqu'elle lit les données et aucune transaction n'est active. Cela signifie que les pools de connexion de sources de données non JTA doivent être plus importants lorsque vous utilisez cette fonction.

Reportez-vous à la page OpenJPA -> Guide de migration EclipseLink pour en savoir plus sur les différences entre les deux fournisseurs JPA.

Fonctions JPA 2.1 disponibles dans OpenJPA

OpenJPA, le fournisseur de JPA 2.0, a des fonctions similaires aux nouvelles fonctions JPA 2.1. Cela signifie que si vous avez une application existante qui utilise la fonction jpa-2.0 et que vous souhaitez utiliser certaines fonctions de JPA 2.1, vous n'avez pas besoin de passer à la fonction jpa-2.1. Au lieu de cela, vous pouvez utiliser l'équivalent de la nouvelle fonction fourni par OpenJPA. Les principales fonctions JPA 2.1 disponibles dans OpenJPA sont :

Génération de schéma

Avec cette fonction, vous pouvez générer un DDL ou interagir directement avec la base de données pour définir des schémas de table sur la base de la définition d'entité JPA. Pour plus d'informations, veuillez vous reporter à la section 9.4 de la spécification concernant JPA 2.1.

Fonction équivalente dans OpenJPA : Mappeur de schéma

Diagrammes d'entité

Avec cette fonction, vous pouvez spécifier l'extraction ou le traitement d'un diagramme d'objets Entity. Pour plus d'informations, reportez-vous à la section 3.7 de la spécification concernant JPA 2.1.

Fonction équivalente dans OpenJPA : FetchPlan et FetchGroup

Interrogation de procédures mémorisées

Avec cette fonction, vous pouvez appeler des procédures stockées dans des bases de données. Pour plus d'informations, veuillez vous référer à la section 3.10.17 de la spécification concernant JPA 2.1.

Fonction équivalente dans OpenJPA : Appel de requête

Conversion du type d'attribut de base

Avec cette fonction, vous pouvez effectuer une conversion entre la représentation d'entité d'un attribut et la représentation de base de données pour les attributs de type de base. Pour plus d'informations, reportez-vous à la section 3.8 de la spécification JPA 2.1.

Fonction équivalente dans OpenJPA : Fonction d'externaliseur

Annotations @Index et @ForeignKey

Reportez-vous aux sections 11.1.19 et 11.1.23 de la spécification JPA 2.1.

Fonction équivalente dans OpenJPA : @Index and @ForeignKey d'OpenJPA.

Méthodes utilitaires désencapsulées pour EntityManager, Cache

Reportez-vous aux sections 3.1.1 et 7.10 de la spécification JPA 2.1.

Fonctions équivalentes dans OpenJPA : EntityManagerImpl.unwrap() et OpenJPAPersistence.cast().

Construction d'objet lors du mappage des résultats à partir d'un SQL natif

Reportez-vous à la section 3.10.16.2.2 de la spécification JPA 2.1.

Fonction équivalente dans OpenJPA : objet ResultShape.


Icône indiquant le type de rubrique Rubrique de concept

Nom du fichier : cwlp_jpa21_behavior.html