我创建了两个实体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 (?, ?, ?)发布于 2017-07-18 03:05:31
是的,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;
...
}在某个时刻,用户的getAccounts()方法被调用。Hibernate说:“好的,我看到getAccounts返回Account对象,并且我们在User和Accounts中定义了一个OneToMany连接关系,但是我需要知道我应该使用Account中的哪一列来连接这两个对象(表)。”
@mappedBy告诉Hibernate,将这个类(用户模型"id“字段)中的@ID值与远程类(帐户模型"user”字段)中的@mappedBy值连接起来。
如果我能进一步澄清,请告诉我。
https://stackoverflow.com/questions/43699183
复制相似问题