Estoy tratando de asignar un objeto @Embeddable en una subclase cuya clase padre ya tiene un campo de ese tipo @Embeddable.Hibernate mapeando un segundo campo @Embeddable en una subclase
La hibernación Embeddable Objects documentation reivindicaciones puedo usar los @AttributeOverrides para anular los nombres de columna de un objeto @Embeddable:
por ejemplo
@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;
...
}
Aquí es el caso que tengo:
@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;
}
El error que consigo es:
org.hibernate.MappingException: repetida la columna en el mapeo de entidad: columna de Logro: contentID (se debe mapear con insert = "false" update = "false") en org.hibernate.mapping.PersistentC lass.checkColumnDuplication (PersistentClass.java:652) en org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication (PersistentClass.java:674) en org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication (PersistentClass.java:670) en org.hibernate.mapping.PersistentClass.checkColumnDuplication (PersistentClass.java:696) en org.hibernate.mapping.PersistentClass.validate (PersistentClass.java:450) en org.hibernate.mapping.SingleTableSubclass.validate (SingleTableSubclass .java: 43) en org.hibernate.cfg.Configuration.validate (Configuration.java:1108) en org.hibernate.cfg.Configuration.buildSessionFactory (Configuration.java:1293) en org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory (AnnotationConfiguration.java:867)
UPDATE:
Busqué problemas de Hibernate relacionados con esto y el proyecto GRAILS afirmó que solucionaron este problema, pero su solución de anotación no parece ser una anotación válida de javax.persistence (quizás sea una versión nueva).
Por curiosidad: ¿Por qué se incrusta país en lugar de utilizar una relación? –