[英]Error in Hibernate Mapping “A Foreign key refering has the wrong number of column. should be 2”
具有復合主鍵trans_id
和version
TRANSFORMATION
表。
EXPRESSION
表只有trans_id
外鍵引用,它沒有version
列。
當我嘗試保存到TRANSFORMATION
,通過JUnit,我得到了以下錯誤。
caused by: org.hibernate.AnnotationException: A Foreign key refering org.persistence.entity.Transformation from org.persistence.entity.Expression has the wrong number of column. should be 2
at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:420) ~[hibernate-core-4.2.8.Final.jar:4.2.8.Final]
at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:117) ~[hibernate-core-4.2.8.Final.jar:4.2.8.Final]
at org.hibernate.cfg.Configuration.processEndOfQueue(Configuration.java:1560) ~[hibernate-core-4.2.8.Final.jar:4.2.8.Final]
at org.hibernate.cfg.Configuration.processFkSecondPassInOrder(Configuration.java:1481) ~[hibernate-core-4.2.8.Final.jar:4.2.8.Final]
...
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:250) ~[spring-test-4.0.2.RELEASE.jar:4.0.2.RELEASE]
at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContextInternal(CacheAwareContextLoaderDelegate.java:64) ~[spring-test-4.0.2.RELEASE.jar:4.0.2.RELEASE]
at org.springframework.test.context.CacheAwareContextLoaderDelegate.loadContext(CacheAwareContextLoaderDelegate.java:91) ~[spring-test-4.0.2.RELEASE.jar:4.0.2.RELEASE]
... 25 more
@Entity(name="Transformation")
@Table(name="Transformation")
public class Transformation extends BaseEntity implements Serializable{
private static final long serialVersionUID = 1L;
@EmbeddedId
private TransformationPK id;
/*@OneToMany(mappedBy="transformation")
private Set<Expression> expressions;*/
@OneToMany
@JoinColumn(name="TRANS_ID", nullable = false)
@Fetch(FetchMode.SUBSELECT)
private Set<Expression> expressions;
}
@Embeddable
public class TransformationPK implements Serializable{
private static final long serialVersionUID = 1L;
@Column(name="TRANS_ID")
private String transId;
@Column(name="VERSION", precision = 2, scale = 1)
private Double transVersion;
public TransformationPK() {
}
}
@Entity(name="EXPRESSION")
@Table(name="EXPRESSION")
public class Expression extends BaseEntity implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@Column(name = "Expression_ID")
@GeneratedValue(strategy=GenerationType.AUTO)
private String expressionId;
@Column(name="TRANS_ID")
private String transId;
/*@ManyToOne
@JoinColumns ({
@JoinColumn(name = "TRANS_ID", insertable = false, updatable = false),
@JoinColumn(name = "VERSION", insertable = false, updatable = false)
})
private Transformation transformation;*/
@ManyToOne
@JoinColumn(name = "TRANS_ID", nullable = false, insertable = false, updatable = false)
private Transformation transformation;
}
誰能建議如何解決這個問題。
由於您的嵌入式PK有兩列,因此您還應該有兩個連接列:
@ManyToOne
@JoinColumns({
@JoinColumn(name = "TRANS_ID", nullable = false, insertable = false, updatable = false),
@JoinColumn(name = "VERSION", ....
})
private Transformation transformation;
順便說一句,你有雙向關聯Transformation-Expression,你應該在一端添加mappedBy。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.