Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 联系人列表的Hibernate Pojo设计_Java_Hibernate_Database Design - Fatal编程技术网

Java 联系人列表的Hibernate Pojo设计

Java 联系人列表的Hibernate Pojo设计,java,hibernate,database-design,Java,Hibernate,Database Design,我想为一组用户和每个用户的联系人列表实现数据库。 为此,我考虑的不是创建数据库表,而是创建 冬眠波乔 首先我想: class User{ BigDecimal Id; //Contact List Set<User> contacts } 类用户{ 双十进制Id; //联系人名单 设置联系人 } 但上述情况会造成数据冗余 所以我想,创建用户作为主表 还有一个班级联系人 class User{ String userName; BigDecimal userId;

我想为一组用户和每个用户的联系人列表实现数据库。 为此,我考虑的不是创建数据库表,而是创建 冬眠波乔

首先我想:

class User{

  BigDecimal Id;
   //Contact List
  Set<User> contacts
}
类用户{
双十进制Id;
//联系人名单
设置联系人
}
但上述情况会造成数据冗余

所以我想,创建用户作为主表 还有一个班级联系人

class User{
String userName;
BigDecimal userId;
@OneToOne;
Contact contact;
}

class Contact{
@OneToOne
User user;
@?;   
Set<User> users;
}
类用户{
字符串用户名;
BigDecimal用户标识;
@奥尼托内;
接触;
}
班级联系{
@奥内托内
用户;
@?;   
设置用户;
}
但我不知道联系人的用户集应该如何映射到用户类


请任何人提出设计方法。

用户和联系人表将处于一对多关系。 一个用户可以有多个联系人

class User{
String userName;
BigDecimal userId;
@OneToMany(mappedBy = "user")
Set<Contact> contacts;
}

class Contact{
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "USER_ID")    
User user;
}
类用户{
字符串用户名;
BigDecimal用户标识;
@OneToMany(mappedBy=“用户”)
设置联系人;
}
班级联系{
@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“USER\u ID”)
用户;
}
用户ID将是用户表中的主键和联系人表中的外键


以这个为例

如果我们这样做,在用户表中,将有两列User\u id,User\u name和Contact table将有一列User\u id(fk),它将不显示任何用户-用户关联,因此我们需要在Contact table中有两列,我也不知道,联系人类的另一个用户将如何与用户类关联。您所说的用户关联是什么意思?阅读链接中的示例,您将了解一对多映射是如何完成的。我想你是在迷惑自己。我知道如何进行一对多映射,但在这种情况下,一对多映射是同一个类,让我给你一个例子,在用户表中,我们有{User_id,User_name}:{1,'a_name':2,'b_name':3,'c_name'}数据,假设我想要用户_id 2,3在上面的设计中,在用户_id 1的联系人列表中,联系人表刚刚使用了_id:{2,3}项,这并不是说用户_id 2,3在用户_id 1的联系人列表中。