2

我创建了两个实体客户和客户记录。

//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 (?, ?, ?)
4

1 回答 1

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 说,“好吧,我看到 getAccounts 返回 Account 对象,我看到我们在 User 与 Accounts 中定义了 OneToMany 连接关系,但我需要知道我应该使用 Account 中的哪一列来连接这两个对象(表)。”

@mappedBy 告诉 Hibernate,将来自此类的 @Id 值(用户模型“id”字段)与远程类中的 @mappedBy 值(帐户模型“用户”字段)连接起来。

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

于 2017-07-17T19:05:30.710 回答