为什么hibernate会创建连接表以及连接列?

时间:2012-03-31 13:44:45

标签: hibernate

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

Class Contact {
    @OneToMany
    public Set getPhoneNumbers() {
        return phoneNumbers;
    }
}
Class PhoneNumber{
    @ManyToOne
    public Contact getContact() {
        return contact;
    }
}

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

contact_phonenumber
   -Contact_id
   -phoneNumbers_id

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

phonenumber
  -id
  -contact_id
  -...

联接表不够吗?

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我找到了解决方案:

Class Contact {
    @OneToMany(mappedBy="contact", targetEntity=PhoneNumber.class, orphanRemoval=false)
    public Set getPhoneNumbers() {
        return phoneNumbers;
    }
}
Class PhoneNumber{
    @ManyToOne
    @JoinTable(name="t_join_contact_phonenumber", joinColumns=@JoinColumn(name="PHONENUMBER_ID"), inverseJoinColumns=@JoinColumn(name="CONTACT_ID"))
    public Contact getContact() {
        return contact;
    }
}

现在,Hibernate只创建了连接表

t_join_contact_phonenumber
   -CONTACT_ID
   -PHONENUMBER_ID

感谢。