首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法理解mappedby

无法理解mappedby
EN

Stack Overflow用户
提问于 2017-04-30 02:34:34
回答 1查看 242关注 0票数 2

我创建了两个实体Customer和Customer Record。

代码语言:javascript
复制
//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“,因为这是持有关系的那一方。那么我的理解有什么问题呢?

代码语言:javascript
复制
Queries generated:
Hibernate: insert into CustomerRecord (customerRecordName, CustomerRecordId) values (?, ?)
Hibernate: insert into Customer (customerName, CUSTREC_ID, customerId) values (?, ?, ?)
EN

回答 1

Stack Overflow用户

发布于 2017-07-18 03:05:31

是的,mappedBy造成了很多混乱,我认为是因为Hibernate正在进行推理。这是一个简单的用例,与您的用例非常相似,但使用一对多关系...即一个用户可能有多个账户,但一个账户可能只有一个用户:

代码语言:javascript
复制
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值连接起来。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43699183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档