我问了一个关于如何设计数据库模式的问题here。
总之,我有一个可以包含联系人和群组的地址簿。群组也可以包含联系人,但只包含与他们在同一地址簿中的联系人。
通讯录
地址簿id
与
ID
地址簿id
组
ID
组ID
要联系的群组
ID
地址簿号码
联系人ID
组ID
通过将地址簿ID添加到多对多关系表,我可以强制执行地址簿匹配。然而,我对hibernate相对较新,所以:
@Entity
@Table(name = "Contact")
public class Contact
{
Addressbook addressbook;
//----bidirectional association
private List groups = new ArrayList();
//----
}
@Entity
@Table(name = "Group")
public class Group
{
Addressbook addressbook;
//----bidirectional association
private List contacts = new ArrayList();
//----
}
所以在一个起点上,我将拥有上面的两个表,并且我需要通过hibernate控制集合,以便在添加或修改集合中的对象时强制执行地址簿id的匹配。 / p>
答案 0 :(得分:1)
您需要指定集合中的元素类型并添加注释ManyToMany
@Entity
@Table(name = "Contact")
public class Contact
{
@Id
@GeneratedValue(GenerationType=AUTO)
private Integer contact_id;
Addressbook addressbook;
//----bidirectional association
//@ManyToMany
//private List<Group> groups = new ArrayList<Group>();
//----
}
我认为,无需向Contact添加收藏组。您可以按“组”表中的联系人ID选择组。此外,您需要为每个表添加id。
@Entity
@Table(name = "Group")
public class Group
{
@Id
@GeneratedValue(GenerationType=AUTO)
private Integer group_id;
Addressbook addressbook;
//----bidirectional association
@ManyToMany
private List<Contact> contacts = new ArrayList<Contact>();
//----
}