@Embeddable
REmbeddedReference
을 두 번째 엔티티 RTask
에 두 번 사용하고 있습니다. 이 임베디드에는 QName 속성이 있으며이 유형은 org.hibernate.usertype.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 type : component [description, filter, relation, targetOid, type]'때문에 그 QName (사용자 정의 사용자 유형) 필드'관계'는 두 개의 열로 표현되어야합니다 ... – viliam
당신의 embeddable에 열 정의가 있습니다. 분명히 테이블에 같은 이름을 가진 두 개의 열을 가질 수는 없습니다. 제공된 링크에서 두 번째 게시물을보십시오. @AttributeOverride를 사용하여 열의 이름을 적절하게 지정할 수 있어야합니다. – jeff