Lorsqu'un attribut est annoté avec @ElementCollection, une table séparée incluant l'ID et la valeur de cet attribut est créée.
Dans OpenJPA, la colonne de l'attribut annoté est nommée element, alors qu'EclipseLink désigne la colonne d'après le nom d'attribut. Pour conserver la compatibilité avec les tables créées avec OpenJPA, ajoutez une annotation @Column avec l'attribut name défini sur element.
Cette règle recherche les annotations @ElementCollection pour lesquelles l'annotation @Column est sans attribut name.
Le correctif rapide ajoute une annotation @Column ou édite une annotation @Column existante sans attribut name.
Par exemple, la règle marque l'annotation @ElementCollection dans la classe entité avec accès FiELD suivante car l'annotation @Column est absente.
import java.util.List; import javax.persistence.ElementCollection; import javax.persistence.Entity; import javax.persistence.Id; @Entity public class ElementCollectionEntity { @Id private int id; @ElementCollection private List<String> listofStrings; } |
Le correctif rapide ajoute l'annotation @Column.
import java.util.List; import javax.persistence.ElementCollection; import javax.persistence.Entity; import javax.persistence.Id; @Entity public class ElementCollectionEntity { @Id private int id; @ElementCollection @Column(name = "element") private List<String> listofStrings; } |
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.