我試圖在子類中映射一個@Embeddable對象,該類的父類中已有一個@Embeddable類型的字段。Hibernate映射子類中的第二個@Embeddable字段
Embeddable Objects documentation權利要求我可以使用@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(應將 映射爲insert =「false」 update =「false」)at org.hibernate.mapping.PersistentC lass.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) at org.hibernate.cfg.Configuration.validate(Configuration.java:1108) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1293) 在 org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)
UPDATE:
我查找了與此有關的Hibernate問題,GRAILS項目聲稱他們解決了這個問題,但他們的註解解決方案似乎不是有效的javax.persistence註釋(也許它是一個新版本)。
出於好奇:爲什麼你嵌入國家,而不是使用的關係呢? – 2013-12-28 21:05:10