Les classes imbriquées doivent être annotées comme imbriquables

Selon la spécification JPA (Java Persistence API), si une entité imbrique une classe à l'aide d'une annotation Embedded, la classe imbriquable doit être annotée avec une annotation Embeddable, et non avec une annotation Entity. Dans OpenJPA, lorsqu'un attribut est assorti de l'annotation @Embedded, mais que la classe de référence est assortie de l'annotation @Entity au lieu de l'annotation @Embeddable, OpenJPA traite cette classe comme un élément imbriquable en imbriquant cette classe dans d'autres entités et en traitant cette classe comme une entité en créant une table pour la classe. EclipseLink génère une exception dans ces conditions, car une classe peut être une entité ou un élément imbriquable.

Cette règle recherche les annotations @Embedded référençant des classes annotées avec @Entity. Elle règle marque les annotations selon la portée de l'analyse, si toutes les classes liées sont trouvées.

Dans cet exemple, la règle marque l'annotation @Entity dans la classe EmbeddableEntity.

   import javax.persistence.EmbeddedId; import javax.persistence.Entity;

   @Entity public classe EmbeddedEntity {

      @Id ID int privé ;

      @Embedded private EmbeddableEntity ee ; }
   import javax.persistence.Entity;

   @Entity classe publique EmbeddableEntity { private int embedField;

      ... }

Pour résoudre le problème, inspectez manuellement l'utilisation de la classe EmbeddableEntity afin de vérifier que celle-ci n'est pas également employée par une classe entité pour que vous puissiez remplacer l'annotation @Entity par @Embeddable.

   import javax.persistence.Embeddable; import javax.persistence.Id;

   @Entity public classe EmbeddedEntity {

      @Id ID int privé ;

      @Embedded private EmbeddableEntity ee ; }
   import javax.persistence.Embeddable;

   @Embeddable classe publique EmbeddableEntity { private int ;

      ... }

Pour des informations sur ce problème et d'autres problèmes de migration d'OpenJPA vers EclipseLink, voir le guide OpenJPA to EclipseLink JPA Migration: Mappings.