![[8.5.5.6 ou ultérieure]](../ng_v8556.gif)
Changements de comportement dans Java Persistence API 2.1
Si vous utilisez déjà la fonction jpa-2.0 pour vos applications, nous vous conseillons de continuer 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 conseillé 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 que vous devez prendre en compte :
- 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
- Comportement de 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 travaillez dans un environnement distribué, comme 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. Voir la documentation sur l'amélioration des entités JPA pour de plus amples informations.
-
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 peuvent 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.
- 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 de source de données non JTA lorsqu'elle lit des données sans transaction active. Cela signifie que les pools de connexion de sources de données non JTA doivent être plus importants lorsque vous utilisez cette fonction.
Voir la page du guide de migration OpenJPA -> 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 nouvelles 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
-
Cette fonction vous permet de générer un DDL ou d'interagir directement avec la base de données pour définir des schémas de table basés sur la définition d'entité JPA. Pour plus d'informations, reportez-vous à la section 9.4 de la spécification JPA 2.1.
Fonction équivalente dans OpenJPA : Mappeur de schéma
- Diagrammes d'entité
-
Cette fonction vous permet de 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 JPA 2.1.
Fonction équivalente dans OpenJPA : FetchPlan et FetchGroup
- Interrogation de procédures mémorisées
Cette fonction vous permet d'appeler des procédures mémorisées dans des bases de données. Pour plus d'informations, reportez-vous à la section 3.10.17 de la spécification JPA 2.1.
Fonction équivalente dans OpenJPA : Appel de requête
- Conversion du type d'attribut de base
-
Cette fonction vous permet de convertir 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 et @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