我在我的實體RTask
中使用@Embeddable
REmbeddedReference
兩次。該嵌入包含QName屬性,其類型定義爲org.hibernate.usertype.UserType
。可嵌入自定義用戶類型在實體中使用兩次
@Embeddable
public class REmbeddedReference implements Serializable {
private String targetOid;
private String description;
private String filter;
private RContainerType type;
private QName relation;
@Columns(columns = {
@Column(name = "relation_namespace"),
@Column(name = "relation_localPart")
})
public QName getRelation() { return relation; }
@Column(length = 36, insertable = true, updatable = true, nullable = true)
public String getTargetOid() { return targetOid; }
@Type(type = "org.hibernate.type.TextType")
public String getDescription() { return description; }
@Enumerated(EnumType.ORDINAL)
public RContainerType getType() { return type; }
@Type(type = "org.hibernate.type.TextType")
public String getFilter() { return filter; }
...setters...
}
RTask
看起來是這樣的:
@Entity
@ForeignKey(name = "fk_task")
public class RTask extends RObject {
private REmbeddedReference objectRef;
private REmbeddedReference ownerRef;
...other fields...
@Embedded
public REmbeddedReference getObjectRef() {
return objectRef;
}
@Embedded
public REmbeddedReference getOwnerRef() {
return ownerRef;
}
...other methods...
}
在啓動過程中,我得到: Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: com.evolveum.midpoint.repo.sql.data.common.RTask column: relation_namespace (should be mapped with insert="false" update="false")
我試圖更新我的NamingStrategy,其產生objectRef_relation_namespace和ownerRef_relation_namespace方法logicalColumnName。但後來我得到: Caused by: org.hibernate.DuplicateMappingException: Table [m_task] contains phyical column name [relation_namespace] represented by different logical column names: [objectRef_relation_namespace], [ownerRef_relation_namespace]
你有任何想法如何在REmbeddedReference
正確映射屬性relation
?
在這裏獲取答案http://stackoverflow.com/questions/331744/jpa-multiple-embedded-fields – JMelnik
我知道'DefaultComponentSafeNamingStrategy',但是當我從'REmbeddedReference'中刪除'@ Columns'時,我得到:'由於:org.hibernate.MappingException:屬性映射的列數錯誤:com.evolveum.midpoint.repo.sql.data.common.RTask.objectRef類型:component [description,filter,relation,targetOid,type]'因爲那QName(自定義用戶類型)字段'關係「必須用兩列表示... – viliam
您的可嵌入列有定義。顯然,你不能在表中有兩個同名的列。看看提供的鏈接中的第二篇文章。您應該能夠使用@AttributeOverride來適當地命名列。 – jeff