bis*_*dum 6 java mysql database hibernate
我正在尝试设计一个酒店应用程序.我有两个表User和Request.用户可以Host或者Visitor可以向对方发送主机请求.但是没有必要将用户定义为访问者或主机,这对系统来说无关紧要,因此我没有单独的表格.这种差异在Request表中非常重要,它需要保留visitor_id和host_id作为外键(与user_idUser表中的主键列映射,因为主机和访问者都是User).
我的问题是如何在hibernate中定义这种关系Annotation?我的意思是,Request表中应该有两个外键,它们被映射到User表中的*user_id*主键列.每个用户可以多次成为主持人或访问者,并且不会发出任何请求.
@Entity
public class Request {
@Id
private Long req_id;
....
}
Run Code Online (Sandbox Code Playgroud)
JB *_*zet 12
请求是针对主机的,也是来自访问者的,因此您只需要从请求到用户的2个ManyToOne关联:
@Entity
public class Request {
@Id
@Column(name = "req_id")
private Long id;
@ManyToOne
@JoinColumn(name = "visitor_id")
private User visitor;
@ManyToOne
@JoinColumn(name = "host_id")
private User host;
// ...
}
Run Code Online (Sandbox Code Playgroud)
如果您想使这些关联成为双向的,那么您只需要在用户中使用相应的集合:
@Entity
private class User {
/**
* requests made to this user, in order for this user to be a host
*/
@OneToMany(mappedBy = "host")
private Set<Request> hostRequests = new HashSet<>();
/**
* requests made by this user, in order for this user to be a visitor
*/
@OneToMany(mappedBy = "visitor")
private Set<Request> visitorRequests = new HashSet<>();
// ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8578 次 |
| 最近记录: |