首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate "mappedBy“的使用

Hibernate "mappedBy“的使用
EN

Stack Overflow用户
提问于 2013-04-20 23:08:36
回答 2查看 2K关注 0票数 0

我读过几个关于使用Hibernate创建表之间的关联的例子,我有点困惑。我希望首先知道在数据库中将创建多少个表,而不像代码那样在另一端指定任何注释:

代码语言:javascript
复制
@Entity
public class Flight implements Serializable {
    @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
    @JoinColumn(name="COMP_ID")
    public Company getCompany() {
        return company;
    }
    ...
} 

我怀疑有两个表Flight,Company和Flight包含一个外键Company_Id。我说的对吗?如果我在另一边添加"mappedBy“,有什么不同:

代码语言:javascript
复制
@Entity
public class Company {
    @OneToMany(mappedBy="company")
    public Set<Flight> getFlights() {
        ...
    }
}

第二种方法将创建多少个表?我认为第二种方法建立了双向关联。这两种情况的实际区别是什么?@ManyToMany关联中的"mappedBy“注释又是怎么回事?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-20 23:25:40

如果您没有在航班属性上放置任何注释,那么将应用默认映射,即@Basic。这意味着列表的全部内容将被序列化并存储在一个名为flights的列中。

这显然不是你想要的。您想要的是使其成为Flight中定义的ManyToOne关联的反面。这就是@OneToMany(mappedBy = "company")所做的。

除此之外,你的假设是正确的。默认情况下,使用实体的表中的联接列来映射ManyToOne。使用JoinColumn注释允许为连接列指定默认名称以外的名称(以及此连接列的其他属性)。

票数 1
EN

Stack Overflow用户

发布于 2013-04-21 00:20:11

当您使用双向关系时,通过使用mappedby可以避免在两个表中存储关系的更改。从您的示例中,如果您删除mappedby、flight和company,则两个表都将具有关系字段。

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

https://stackoverflow.com/questions/16121840

复制
相关文章

相似问题

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