Я пытаюсь отобразить объект @Embeddable в подклассе, родительский класс которого уже имеет поле этого типа @Embeddable.
Документация hibernate Embeddable Objects утверждает, что я могу использовать @AttributeOverrides для переопределения имен столбцов объекта @Embeddable:
, например
@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;
...
}
Вот мой случай:
@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;
}
Я получаю ошибку:
org.hibernate.MappingException:
Повторный столбец в сопоставлении для сущности:
Столбец достижения: contentID (должен
отображаться с помощью вставки = "ложь"
update = "false") в
org.hibernate.mapping.PersistentClass.checkColumnDuplication (PersistentClass.java:652)
в
org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication (PersistentClass.java:674)
в
org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication (PersistentClass.java:670)
в
org.hibernate.mapping.PersistentClass.checkColumnDuplication (PersistentClass.java:696)
в
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)
UPDATE:
Я искал проблемы Hibernate, связанные с этим, и проект GRAILS утверждал, что они исправили эту проблему, но их решение для аннотаций, похоже, не является действительными аннотациями javax.persistence (возможно, это новая версия).
JPA @ Embeddable / @ Embedded throws org.hibernate.MappingException: повторяющийся столбец в сопоставлении для сущности