gpt4 book ai didi

java - 使用来自同一个表注释的两个外键 hibernate

转载 作者:可可西里 更新时间:2023-11-01 06:40:30 25 4
gpt4 key购买 nike

我正在尝试设计一款酒店应用。我有两个表,分别是 UserRequest。用户可以是HostVisitor 并且可以互相发送主机请求。但是不需要将用户定义为访问者或主机,这对系统来说无关紧要,所以我没有为他们准备单独的表。这种差异在 Request 表中很重要,需要将 visitor_idhost_id 保留为外键(映射到 User 表中的 user_id 主键列因为主机和访问者也是用户)。

我的问题是如何在 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<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<>();

// ...
}

关于java - 使用来自同一个表注释的两个外键 hibernate ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22954787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com