2012-07-02 26 views
1

我在我的實體RTask中使用@EmbeddableREmbeddedReference兩次。該嵌入包含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

+0

在這裏獲取答案http://stackoverflow.com/questions/331744/jpa-multiple-embedded-fields – JMelnik

+0

我知道'DefaultComponentSafeNamingStrategy',但是當我從'REmbeddedReference'中刪除'@ Columns'時,我得到:'由於:org.hibernate.MappingException:屬性映射的列數錯誤:com.evolveum.midpoint.repo.sql.data.common.RTask.objectRef類型:component [description,filter,relation,targetOid,type]'因爲那QName(自定義用戶類型)字段'關係「必須用兩列表示... – viliam

+0

您的可嵌入列有定義。顯然,你不能在表中有兩個同名的列。看看提供的鏈接中的第二篇文章。您應該能夠使用@AttributeOverride來適當地命名列。 – jeff

回答

1

解決方案:

​​

沒有工作。我必須將QName類型實現從CompositeUserType更改爲另一個可嵌入實體RQName,它代表此屬性REmbeddedReference可嵌入。

相關問題