我正在尝试设计款待应用程序。我有两个表,分别为User和Request。用户可以是Host或Visitor可以互相发送主机请求。但是无需将“用户”定义为访客或主机,这对于系统来说并不重要,因此我没有针对他们的单独表。这种差异在Request表中非常重要,并且需要保留visitor_id和host_id作为外键(user_id由于Host和visitor也是User,因此与User表的主键列对应)。
User
Request
Host
Visitor
visitor_id
host_id
user_id
我的问题是如何在hibernate状态下定义此关系Annotation?我的意思是,请求表中应该有两个外键,它们被映射到用户表中的 user_id 主键列。每个用户可以多次成为主持人或访问者,并且不进行任何请求。
Annotation
@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<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<>(); // ... }