我正在尝试设计款待应用程序。我有两个表,分别为User
和Request
。用户可以是Host
或Visitor
可以互相发送主机请求。但是无需将“用户”定义为访客或主机,这对于系统来说并不重要,因此我没有针对他们的单独表。这种差异在Request表中非常重要,并且需要保留visitor_id
和host_id
作为外键(user_id
由于Host和visitor也是User,因此与User表的主键列对应)。
我的问题是如何在hibernate状态下定义此关系Annotation
?我的意思是,请求表中应该有两个外键,它们被映射到用户表中的 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<>();
// ...
}
问题内容: 我想使用联接表在两个表之间建立一对多关系。 最后,我想使用Hibernate批注执行此操作。 我找到了一些使用xml映射执行此操作的示例,但没有带注释的示例。 我相信这就是需要创建表的方式 问题答案: 不要寻找例子。阅读官方文档: 另外,请注意,这是单向一对多关联的默认设置。因此,如果默认的表名和列名适合您,您甚至不必提供注释。
在一个表中有两列可以是来自同一表的外键,这样可以吗? 例如: 我有一个“address”表,表中有列: id,street,city_id,state,country(或id,street,city_id,state_id,state_id) 我有一个'states'表,保存状态和国家:id、name、level 那么我可以把states_id放在地址表的state和country中吗(如上面的括
问题内容: 我有一个实体- 。由描述。 Hibernate为每个实体创建一个表,因此当我调用时,我的数据总是保存到该表中。 现在,我需要另一个表来存储相同类型的数据,并且只需要将我的实体保存到该表中。 数据结构 (类似这样): 使用此方法 : 和结果,我应该在和 中。 由于系统限制,我无法将这两个对象放在一个表中。(即使创建额外的字段也是个坏主意)。 我可以不进行子类化吗?使用Programmat
问题内容: 我试图使用 Hibernate 4.1.1 保持一对多和多对一关系,但外键始终为 NULL 。 有两个实体: Account 和 Client 。一个 客户 可以有多个 帐户, 而一个 帐户 恰好有一个 客户 。 这些是类(仅重要的部分): Account.java 客户端程序 Test.java 运行时,Hibernate将外键添加到表中: 两个帐户的id_client列均为 NUL
问题内容: 我想要一个带有来自同一表的2个外键的Django模型。这是一个事件表,其中有两列用于员工:“参与者”和“接收者”。但是我得到这个错误: 错误:一个或多个模型未通过验证:tasks.task:中间模型TaskEvent具有多个到Employee的外键,这是模棱两可的,不允许使用。 有没有更好的方法对此建模?谢谢 我想我要添加一张桌子。其中有两个记录,每个与之相关的两个雇员中的每个。有人知
问题内容: 我有一个表,其中父对象具有可选的多对一关系。问题在于该表已设置为默认将fkey列设置为0。 选择时,使用fetch =“ join”等-fkey的默认值0被用来反复尝试从另一个表中选择ID0。当然这不存在,但是我怎么能告诉Hibernate将0的值与NULL相同- 在获取不存在的关系时不循环20多次以上? 问题答案: 我能够通过创建一个id- long类型来解决此问题,该类型扩展了内置