我读过几个关于使用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“注释又是怎么回事?
发布于 2013-04-20 23:25:40
如果您没有在航班属性上放置任何注释,那么将应用默认映射,即@Basic。这意味着列表的全部内容将被序列化并存储在一个名为flights的列中。
这显然不是你想要的。您想要的是使其成为Flight中定义的ManyToOne关联的反面。这就是@OneToMany(mappedBy = "company")所做的。
除此之外,你的假设是正确的。默认情况下,使用实体的表中的联接列来映射ManyToOne。使用JoinColumn注释允许为连接列指定默认名称以外的名称(以及此连接列的其他属性)。
发布于 2013-04-21 00:20:11
当您使用双向关系时,通过使用mappedby可以避免在两个表中存储关系的更改。从您的示例中,如果您删除mappedby、flight和company,则两个表都将具有关系字段。
https://stackoverflow.com/questions/16121840
复制相似问题