为啥hibernate会创建一个连接表和一个连接列?

Posted

技术标签:

【中文标题】为啥hibernate会创建一个连接表和一个连接列?【英文标题】:Why is hibernate creating a join table as well as a join column?为什么hibernate会创建一个连接表和一个连接列? 【发布时间】:2012-03-31 13:44:44 【问题描述】:

这是我用来表达双向 OneToMany 关系的两个类。

班级联系 @OneToMany 公共设置 getPhoneNumbers() 返回电话号码; 类电话号码 @ManyToOne 公共联系人 getContact() 返回联系方式;

Hibernate 正在创建一个连接表(我认为这对我的需要有好处)

联系电话 -Contact_id -phoneNumbers_id

但为什么要在 phoneNumber 表上创建这个额外的连接列 (contact_id)

电话号码 -ID -contact_id -...

连接表还不够吗?

此外,当我保存电话号码或联系人时,连接表会更新,但连接列不会更新。那么为什么这个连接列在这里呢?

感谢您的帮助。

【问题讨论】:

【参考方案1】:

我找到了解决办法:

班级联系 @OneToMany(mappedBy="contact", targetEntity=PhoneNumber.class, orphanRemoval=false) 公共设置 getPhoneNumbers() 返回电话号码; 类电话号码 @ManyToOne @JoinTable(name="t_join_contact_phonenumber", joinColumns=@JoinColumn(name="PHONENUMBER_ID"), inverseJoinColumns=@JoinColumn(name="CONTACT_ID")) 公共联系人 getContact() 返回联系方式;

现在,Hibernate 只创建连接表

t_join_contact_phonenumber -CONTACT_ID -PHONENUMBER_ID

谢谢。

【讨论】:

您好,您是否使用 mysql 来存储您的数据?因为我使用 MySQL 访问表元数据时出错,想知道使用什么数据库来防止此错误

以上是关于为啥hibernate会创建一个连接表和一个连接列?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 MyEclipse 的 Hibernate 逆向工程在映射某些表时会创建多个类?

如何将表与中间表和附加相关列spring hibernate mvc连接起来

休眠不关闭连接

如何不使用 Hibernate Envers 审计连接表和相关实体?

Mongoose lambda 示例每次被触发时都会创建一个新连接

Django - 当用户提交表单时,会创建表,但表之间的连接不是