无法理解mappedby

时间:2017-04-29 18:34:34

标签: hibernate mappedby

我创建了两个实体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 (?, ?, ?)

1 个答案:

答案 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;字段)。

如果我能帮助进一步澄清,请告诉我。