【问题标题】:Hibernate Pojo Design for Contact List联系人列表的 Hibernate Pojo 设计
【发布时间】:2015-07-04 05:30:24
【问题描述】:

我想为一组用户和每个用户的联系人列表实现数据库。 为此,我在想而不是创建数据库表,而是想创建 休眠 Pojo。

我首先想到的是:

class User{

  BigDecimal Id;
   //Contact List
  Set<User> contacts
}

但以上会造成数据冗余;

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

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

class Contact{
@OneToOne
User user;
@?;   
Set<User> users;
}

但我不知道应该如何映射联系人的用户集用户类。

请任何人提出应该是什么设计方法。

【问题讨论】:

    标签: java hibernate database-design


    【解决方案1】:

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

    class User{
    String userName;
    BigDecimal userId;
    @OneToMany(mappedBy = "user")
    Set<Contact> contacts;
    }
    
    class Contact{
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "USER_ID")    
    User user;
    }
    

    USER_ID 将是用户表中的主键和联系人表中的外键。

    查看此link 以获取示例

    【讨论】:

    • 如果我们这样走,在User表中会有两列user_id,user_name和Contact表会有一列user_id(fk),它不会显示任何用户-用户关联,所以我们Contact 表中需要两列,我也不知道,Contact 类的另一个用户如何与 User 类关联。
    • 用户-用户关联是什么意思?阅读链接中的示例,您将了解如何完成一对多映射。我觉得你自己搞糊涂了。
    • 我知道一对多映射是如何完成的,但是在这种情况下,一对多映射是同一个类的,让我举个例子,在用户表中我们有 {user_id,user_name}:{ 1,'a_name': 2,'b_name': 3,'c_name'} 数据,假设我想要 user_id 2,3 在 user_id 1 的联系人列表中,在上面的设计中,联系人表将刚刚 used_id:{2,3 } 条目,这并不是说 user_id 2,3 在 user_id 1 的联系人列表中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    相关资源
    最近更新 更多