当前位置: 首页 > 面试题库 >

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

端木令
2023-03-14
问题内容

我正在尝试设计款待应用程序。我有两个表,分别为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;

 ....

}

问题答案:

请求是针对主机的,并且是来自访客的,因此,您仅需要从请求到用户就有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类型来解决此问题,该类型扩展了内置