我创建了两个实体Customer和Customer Record。
//customer class
@OneToOne
@JoinColumn(name="CUSTREC_ID", unique=true)
CustomerRecord customerRecord;
//customer record class
@OneToOne(mappedBy="customerRecord")
Customer customer;
mappedBy的目的是表明所有者存在于关系的另一端。当我看到我的示例并看到mappedBy被用作mappedBy =“customerRecord”时,我发现它与mappedBy的定义相矛盾,因为映射是在关系的客户端完成的,并且在mappedBy中为属性提到的值是客户记录。如果我遵循mappedBy的定义那么它应该是mappedBy =“customer”,因为那是持有关系的一方。那么我的理解有什么不对?
Queries generated:
Hibernate: insert into CustomerRecord (customerRecordName, CustomerRecordId) values (?, ?)
Hibernate: insert into Customer (customerName, CUSTREC_ID, customerId) values (?, ?, ?)
答案 0 :(得分:1)
是的,mappedBy引起了很多混乱,我认为是因为Hibernate的推断。这是一个简单的用例,非常类似于你,但使用一对多的关系...即一个用户可能拥有多个帐户,但一个帐户可能只有一个用户:
public class User {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@OneToMany(fetch = FetchType.LAZY, mappedBy="user")
private List<Account> accounts = new ArrayList<Account>();
public List<Account> getAccounts() {
return Accounts;
}
...
}
public class Account {
...
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private User user;
...
}
在某些时候,会调用User getAccounts()方法。 Hibernate说,&#34;好吧,我看到getAccounts返回Account对象,我看到我们在User with Accounts中定义了一个OneToMany连接关系,但是我需要知道Account I中哪个列应该用来连接这两个对象(表)&#34;
@mappedBy告诉Hibernate,使用远程类中的@mappedBy值从此类(用户模型&#34; id&#34;字段)加入@Id值(帐户模型&#34;用户&#34;字段)。
如果我能帮助进一步澄清,请告诉我。