Hibernate" mappedBy"使用

时间:2013-04-20 15:08:36

标签: hibernate java-ee jpa

我已经阅读了几个关于使用Hibernate创建表之间关联的例子,我有点困惑。我想初步了解数据库中将创建多少个表而不在代码中指定任何注释:

@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”添加为:

,有什么区别
@Entity
public class Company {
    @OneToMany(mappedBy="company")
    public Set<Flight> getFlights() {
        ...
    }
}

第二种方法将创建多少个表?我想第二种方法建立了双向关联。这两种情况有什么实际区别? @ManyToMany关联中的“mappedBy”注释会发生什么?

2 个答案:

答案 0 :(得分:1)

如果未在航班属性上添加任何注释,则将应用默认映射,即@Basic。这意味着列表的全部内容将被序列化并存储在名为flight的列中。

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

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

答案 1 :(得分:1)

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