小编典典

使用来自同一表的两个外键休眠-注释

hibernate

我正在尝试设计款待应用程序。我有两个表,分别为UserRequest。用户可以是HostVisitor可以互相发送主机请求。但是无需将“用户”定义为访客或主机,这对于系统来说并不重要,因此我没有针对他们的单独表。这种差异在Request表中非常重要,并且需要保留visitor_idhost_id作为外键(user_id由于Host和visitor也是User,因此与User表的主键列对应)。

我的问题是如何在hibernate状态下定义此关系Annotation?我的意思是,请求表中应该有两个外键,它们被映射到用户表中的 user_id
主键列。每个用户可以多次成为主持人或访问者,并且不进行任何请求。

@Entity
public class Request {
@Id
private Long req_id;

 ....

}

阅读 250

收藏
2020-06-20

共1个答案

小编典典

请求是针对主机的,并且是来自访客的,因此,您仅需要从请求到用户就有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<>();

    // ...
}
2020-06-20