我面临以下情况:
Table Store: |Id|...|CostCenterNumber|
Table MasterData: |dennskdnr|...|
我当前的映射如下所示
@Entity
@Table(name = "Store")
public class Store implements Identifiable {
[...]
@OneToOne(optional = true)
@JoinColumn(name = "CostCenterNumber", insertable = false, updatable = false)
private MasterData masterData;
[...]
}
和
@Entity
@Table(name = "MasterData")
public class MasterData {
[...]
@OneToOne(optional = true)
@JoinColumn(name = "dennskdnr")
private Store store;
[...]
}
导致我出现以下异常:
org.hibernate.TypeMismatchException: Provided id of the wrong type for class datamodel.Store. Expected: class java.lang.String, got class java.lang.Integer
最佳答案
以下是关联的映射方式:
@Entity
@Table(name = "Store")
public class Store implements Identifiable {
@OneToOne(optional = true)
@JoinColumn(name = "CostCenterNumber", referencedColumnName="dennskdnr")
private MasterData masterData;
}
@Entity
@Table(name = "MasterData")
public class MasterData {
@OneToOne(optional = true, mappedBy = "masterData")
private Store store;
}
请记住:在双向关联中,始终有一个所有者方(定义关联的映射方式)和一个反方(使用必须使用 mappedBy
属性来表示:我是反方,查看另一个实体中的“masterData”属性就知道这个关联是如何映射的。
关于java - Hibernate 通过非 id 列关联两个实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22246105/