我已经阅读了几个关于使用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”注释会发生什么?
答案 0 :(得分:1)
如果未在航班属性上添加任何注释,则将应用默认映射,即@Basic
。这意味着列表的全部内容将被序列化并存储在名为flight的列中。
这显然不是你想要的。你想要的是使它成为Flight中定义的ManyToOne关联的反面。这就是@OneToMany(mappedBy = "company")
所做的。
除此之外,您的假设是正确的。默认情况下,使用实体表中的连接列映射ManyToOne。使用JoinColumn批注可以指定连接列的默认名称(以及此连接列的其他属性)。
答案 1 :(得分:1)
当您使用双向关系时,使用mappedby可以在两个表中更改存储关系,您可以避免它。从您的示例中删除mappedby,flight和company两个表都将具有关系字段。