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
针对不同需求的Hibernate映射实体_Hibernate_Hibernate Annotations - Fatal编程技术网

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

针对不同需求的Hibernate映射实体,hibernate,hibernate-annotations,Hibernate,Hibernate Annotations,我有两个实体。1) 文档和2)文档用户。文档可以有读者和作者。表格设计如下: 文档 身份证 名字 文档用户 身份证 名字 角色 文件id “角色”属性的值可以是READER和WRITER 我想设计文档类,如下所示 @Entity @Table public class document { @Id private int id; @Column private String name; private List<DocumentUser> readers; private

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

文档

  • 身份证
  • 名字
文档用户

  • 身份证
  • 名字
  • 角色
  • 文件id
“角色”属性的值可以是READER和WRITER

我想设计文档类,如下所示

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

private List<DocumentUser> readers;

private List<DocumentUser> writers;
}
@实体
@桌子
公共类文档
{
@身份证
私有int-id;
@纵队
私有字符串名称;
私人列表阅读器;
私人名单作者;
}
请指导我如何映射上述类中的“读者”和“作者”,以便在选择文档时获得他们的列表


谢谢。

我会让事情变得简单,只需要一个映射的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;
}
public List getWriters(){
列表结果=新建ArrayList();
for(DocumentUser du:documentUsers){
if(du.getRole()==DocumentUserRole.WRITER){
结果:添加(du);
}
}
返回du;
}
这样做的优点是非常接近数据库设计的实际情况。它不需要任何特定于实现的技巧。它还允许通过执行
documentUser.setRole(DocumentUserRole.writer)
将读卡器转换为编写器,而无需从列表中删除用户并将其添加到另一个列表中


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

读卡器可以成为写卡器吗(反之亦然)?您想在
文档用户
的类层次结构中设置
读卡器
写卡器
,然后使用系统。@jbniset:Writer默认为读卡器。是的,读者可以成为作家。谢谢你的帮助。但当我选择文档时,它不会自动加载我的读者和作者列表。我需要调用这个方法。我真正想要的是,当我加载文档时,它将预先填充列表。默认情况下,许多关联都是延迟加载的。加载时,将填充
documentUsers
列表。当您调用getWriters()时,它将延迟加载
documentUsers
列表,并仅返回作为编写器的用户。我真的不知道问题出在哪里。