Hibernate mappant un deuxième champ @Embeddable dans une sous-classe

J’essaie de mapper un object @Embeddable dans une sous-classe dont la classe parent a déjà un champ de ce type @Embeddable.

La documentation relative aux objects incorporables d’hibernate prétend que je peux utiliser les atsortingbuts @AtsortingbuteOverrides pour remplacer les noms de colonne d’un object @Embeddable:

par exemple

@Entity public class Person implements Serializable { // Persistent component using defaults Address homeAddress; @Embedded @AtsortingbuteOverrides( { @AtsortingbuteOverride(name="iso2", column = @Column(name="bornIso2") ), @AtsortingbuteOverride(name="name", column = @Column(name="bornCountryName") ) } ) Country bornIn; ... } 

Voici le cas que j’ai:

  @Embeddable public class ContentID implements Serializable { @Column(name="contentID") private Ssortingng contentPath; } @MappedSuperclass public abstract class BaseDomainObject implements Serializable { @Embedded private ContentID contentID; } public class Achievement extends BaseDomainObject { @Embedded @AtsortingbuteOverrides( { @AtsortingbuteOverride(name="contentID", column = @Column(name="awardedItem") ), } ) private ContentID awardedItem; } 

L’erreur que je reçois est:

org.hibernate.MappingException: colonne répétée dans le mappage pour l’entité: colonne Achievement: contentID (doit être mappée avec insert = “false” update = “false”) à org.hibernate.mapping.PersistentClass.checkColumnDuplication (PersistentClass.java:652) à org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication (PersistentClass.java:674) à org.hibernate.mapping.PersistentClass.checkPolertyDuplication (PersistentClass.java:670) à org.hibernate.mapping.Policern ) à org.hibernate.mapping.PersistentClass.validate (PersistentClass.java:450) à org.hibernate.mapping.SingleTableSubclass.validate (SingleTableSubclass.java:43) à org.hibernate.cfg.Configuration.validate (Configuration.java: 1108) à org.hibernate.cfg.Configuration.buildSessionFactory (Configuration.java:1293) à org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory (AnnotationConfiguration.java:867)

METTRE À JOUR:

J’ai cherché des problèmes avec Hibernate à ce sujet et le projet GRAILS a affirmé qu’ils avaient résolu ce problème, mais que leur solution d’annotation ne semblait pas être une annotation javax.persistence valide (peut-être une nouvelle version).

JPA @ Embeddable / @ Embedded lève org.hibernate.MappingException: colonne répétée dans le mappage pour l’entité

Le problème semble être le suivant:

  public class ContentID implements Serializable { @Column(name="contentID") private Ssortingng contentPath; } 

Vous faites en sorte que le nom de la colonne contentPath soit “contentId” et cela se heurte à votre annotation AtsortingbuteOverride ultérieurement.

Essaye ça:

 public class ContentID implements Serializable { @Column(name="contentPath") private Ssortingng contentPath; } 

UPDATE Je m’interroge également sur ceci:

 @Embedded @AtsortingbuteOverrides( { @AtsortingbuteOverride(name="contentID", column = @Column(name="awardedItem") ), } ) private ContentID awardedItem; 

Vous semblez changer le nom de la colonne contentId ici en awardItem. Est-ce vraiment nécessaire?

Vincent a raison. Le champ atsortingbuteOverride Nom fait référence à un nom de colonne alors qu’il devrait s’agir d’un atsortingbut / propriété d’une classe.

 @AtsortingbuteOverrides( { @AtsortingbuteOverride(name="contentPath", column = @Column(name="awardedItem") ), } ) 

Notez que le nom correspond à la propriété de classe et non à la colonne de firebase database.

Voir la documentation

j’utilise

 @JoinColumn(insertable=false, updatable=false) 

comme solution de contournement.