使用来自相同表注释的两个外键来hibernate
我正在尝试设计一个酒店应用程序。 我有两个表作为User
和Request
。 用户可以是Host
或Visitor
,可以互相发送主机请求。 但是没有必要将用户定义为访问者或主机,这对系统来说无关紧要,因此我没有单独的表格。 这种差异在Request表中非常重要,需要将visitor_id
和visitor_id
保持为外键(使用User表中的user_id
主键列映射,因为主机和访问者都是User)。
我的问题是如何在Hibernate中使用Annotation
定义这种关系? 我的意思是,Request表中应该有两个外键,它们被映射到User表中的* user_id *主键列。 每个用户可以多次成为主持人或访问者,并且不会发出任何请求。
@Entity public class Request { @Id private Long req_id; .... }
请求是针对主机的,也是来自访问者的,因此您只需要从请求到用户的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; // ... }
如果要使这些关联成为双向关系,那么您只需要在用户中使用相应的集合:
@Entity private class User { /** * requests made to this user, in order for this user to be a host */ @OneToMany(mappedBy = "host") private Set hostRequests = new HashSet<>(); /** * requests made by this user, in order for this user to be a visitor */ @OneToMany(mappedBy = "visitor") private Set visitorRequests = new HashSet<>(); // ... }