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;
...
}