Hibernate mappant un deuxième champ @Embeddable dans une sous-classe
Je suis en train de mapper un @Embeddable objet dans une sous-classe dont la classe parent a déjà un champ de @Embeddable type.
Hibernate Intégrable de documentation sur les Objets créances je peux utiliser le @AttributeOverrides pour remplacer les noms de colonne d'un @Embeddable objet:
par exemple
@Entity
public class Person implements Serializable {
//Persistent component using defaults
Address homeAddress;
@Embedded
@AttributeOverrides( {
@AttributeOverride(name="iso2", column = @Column(name="bornIso2") ),
@AttributeOverride(name="name", column = @Column(name="bornCountryName") )
} )
Country bornIn;
...
}
Voici le cas que j'ai:
@Embeddable
public class ContentID implements Serializable {
@Column(name="contentID")
private String contentPath;
}
@MappedSuperclass
public abstract class BaseDomainObject implements Serializable {
@Embedded
private ContentID contentID;
}
public class Achievement extends BaseDomainObject {
@Embedded
@AttributeOverrides( {
@AttributeOverride(name="contentID", column = @Column(name="awardedItem") ),
} )
private ContentID awardedItem;
}
L'erreur que j'obtiens est:
org.mise en veille prolongée.MappingException:
Répétée de la colonne dans la cartographie de l'entité:
Réalisation de la colonne: contentID (doit
être mappé avec insert="false"
mise à jour="false") à
org.mise en veille prolongée.la cartographie.PersistentClass.checkColumnDuplication(PersistentClass.java:652)
au
org.mise en veille prolongée.la cartographie.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:674)
au
org.mise en veille prolongée.la cartographie.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:670)
au
org.mise en veille prolongée.la cartographie.PersistentClass.checkColumnDuplication(PersistentClass.java:696)
au
org.mise en veille prolongée.la cartographie.PersistentClass.valider(PersistentClass.java:450)
au
org.mise en veille prolongée.la cartographie.SingleTableSubclass.valider(SingleTableSubclass.java:43)
au
org.mise en veille prolongée.cfg.La Configuration.valider la Configuration.java:1108)
au
org.mise en veille prolongée.cfg.La Configuration.buildSessionFactory(de Configuration.java:1293)
au
org.mise en veille prolongée.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
Mise à JOUR:
J'ai regardé pour Hibernate questions relatives à cette et le GRAAL projet ont affirmé qu'ils résolu ce problème, mais leur annotation solution ne semble pas être valide javax.la persistance des annotations (c'est peut-être une nouvelle version).
source d'informationauteur Dougnukem
Vous devez vous connecter pour publier un commentaire.
Le problème semble être ceci:
Que vous faites de la contentPath colonne nom "contentId" et qui est en conflit avec votre AttributeOverride annotation plus tard.
Essayez ceci:
Mise à JOUR
Je suis également de s'interroger sur cette:
Vous semblent changer le nom du contentId colonne ici pour awardedItem. Est-ce vraiment nécessaire?
Vincent est à droite. Le
attributeOverride
Nom de domaine est en se référant à un nom de colonne quand il doit être un attribut ou la propriété d'une classe.Notez que le nom de la propriété de la classe de ne pas la colonne de base de données.
Voir la documentation
Je suis en utilisant
comme une solution de contournement.