针对不同需求的Hibernate映射实体

时间:2012-06-10 13:36:44

标签: hibernate hibernate-annotations

我有两个实体。 1)文档和2)Document_Users。文档可以包含读者和作者。表格设计如下:

文档

  • 编号
  • 名称

Document_Users

  • ID
  • 名称
  • 作用
  • DOCUMENT_ID

“role”属性可以具有READER和WRITER值。

我想设计Document类,如下所示。

@Entity
@Table
public class document
{
@Id
private int id;
@Column
private String name;

private List<DocumentUser> readers;

private List<DocumentUser> writers;
}

请指导我如何在上面的课程中映射“读者”和“作家”,以便我可以在选择文档时获取它们的列表。

感谢。

1 个答案:

答案 0 :(得分:0)

我会让事情变得简单,只需要一个映射的DocumentUser集合。让作者只返回过滤后的集合。让读者不是作家的同意:

public List<DocumentUser> getWriters() {
    List<DocumentUser> result = new ArrayList<DocumentUser>();
    for (DocumentUser du : documentUsers) {
        if (du.getRole() == DocumentUserRole.WRITER) {
            result.add(du);
        }
    }
    return du;
}

这具有非常接近数据库设计的现实的优点。它不需要任何特定于实现的技巧。它允许只需执行documentUser.setRole(DocumentUserRole.WRITER)即可将读者转换为编写者,而无需从列表中删除用户并将其添加到另一个列表中。

如果从一开始就知道DocumentUser的类型,并且永远不会改变,那么基于继承的解决方案是合适的。