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_Mapping_Entity - Fatal编程技术网

Hibernate 将具有两个实体的实体映射到另一个相同的实体

Hibernate 将具有两个实体的实体映射到另一个相同的实体,hibernate,mapping,entity,Hibernate,Mapping,Entity,我有两个实体,其中一个(任务)拥有另一个实体(用户)的两个引用 公共类任务{ 私有int-id; 私人用户出版商; 私人名单管理人; } 公共用户{ 私有int-id; 私有字符串名称; 私有列表任务; } 在任务端,我可以将“一对一”设置为“发布者”,将“一对多”设置为“管理者”,但如何在用户端设置映射?这取决于您希望在数据库中拥有什么 如果您想为publisher使用单独的外键,并为manager使用联接表,那么映射另一侧的最简单方法是: public class Task{ @M

我有两个实体,其中一个(任务)拥有另一个实体(用户)的两个引用

公共类任务{
私有int-id;
私人用户出版商;
私人名单管理人;
}
公共用户{
私有int-id;
私有字符串名称;
私有列表任务;
}

在任务端,我可以将“一对一”设置为“发布者”,将“一对多”设置为“管理者”,但如何在用户端设置映射?

这取决于您希望在数据库中拥有什么

如果您想为
publisher
使用单独的外键,并为
manager
使用联接表,那么映射另一侧的最简单方法是:

public class Task{
    @ManyToOne 
    private User publisher;

    @ManyToMany
    private List<User> manager;

     ...
}

public User{
     @OneToMany(mappedBy = "publisher")
     private List<Task> publishedTasks;

     @ManyToMany(mappedBy = "manager")
     private List<Task> managedTasks;

     ...
}

同时想想你是否需要这种双向关系。当您需要特定用户参与的所有任务的列表时,似乎没有那么多用例。也许您根本不需要在
用户
端建立这种关系,而是可以使用查询。

这取决于您希望在数据库中拥有什么

如果您想为
publisher
使用单独的外键,并为
manager
使用联接表,那么映射另一侧的最简单方法是:

public class Task{
    @ManyToOne 
    private User publisher;

    @ManyToMany
    private List<User> manager;

     ...
}

public User{
     @OneToMany(mappedBy = "publisher")
     private List<Task> publishedTasks;

     @ManyToMany(mappedBy = "manager")
     private List<Task> managedTasks;

     ...
}

同时想想你是否需要这种双向关系。当您需要特定用户参与的所有任务的列表时,似乎没有那么多用例。也许您在
用户方面根本不需要这种关系,可以使用查询来代替。

非常感谢!!!我从没想过用户中会有两个列表,谢谢。:)我会试试看!!:)非常感谢你!!!我从没想过用户中会有两个列表,谢谢。:)我会试试看!!:)
public enum Role { PUBLISHER, MANAGER }

public class Task{
    @ManyToMany
    @MapKeyEnumerated
    private Map<Role, User> participants;
     ...
}

public User{
    @ManyToMany(mappedBy = "participants")
    private List<Task> tasks;
     ...
}