java - Hibernate 中的关联类映射

标签 java hibernate mapping

我是一名学生,我是 Hibernate 框架的新手,我有一个关联类 我想知道如何映射它 情况:

         Entity_1[0..\*]-------------------------[0..\*]Entity_2

                                 |
                                 |
                                 |
                                 |
                                 |
                          Association class
                           Date_affectation
                           Date_expiration

我应该使用什么关联规则?

最佳答案

您可以将关联建模为单独的 Association 实体。时间数据可以建模为常规 Date 属性(如 @Temporal(TemporalType.TIMESTAMP))。

您可以将关联的 PK 建模为 Entity_1Entity_2 的外键组合 - 这将使关联成为依赖实体。或者您可以为其分配一个自己的 ID,并通过 ManyToOne 关系连接到 Entity_1Entity_2

编辑:我的大部分示例实现都是无耻地从@Vlad 的回答中窃取的,因为主要区别在于实体有一个 id 并且是可查询的,而可嵌入的则没有。

我已经从日期列中删除了 @Column(updatable=false),因为我不确定这是必需的并添加了 @Temporal(TemporalType.TIMESTAMP)因为它是 required by the JPA spec从而增加了便携性。

由于这是一个双向映射,我在反面(实体)使用 mappedBy 而不是在拥有方(关联)使用 JoinColumn

@Entity
public class Association {

  @Id
  @GeneratedValue(...)
  private Long id;

  @Column
  @Temporal(TemporalType.TIMESTAMP)
  private Date affectation;

  @Column
  @Temporal(TemporalType.TIMESTAMP)
  private Date expiration;

  @ManyToOne(fetch=FetchType.LAZY)
  private Entity1 entity1;

  @ManyToOne(fetch=FetchType.LAZY)
  private Entity2 entity2;
}

Entity1和Entity2看起来是一样的,只是把数字换掉了。我不确定使用 Set 接口(interface)的附加值,所以我将其替换为 List,但也许我遗漏了什么。

public class Entity1 {

  @OneToMany(mappedBy="entity1")
  private List<Association> associations = new ArrayList<Association>();
  ...
}

关于java - Hibernate 中的关联类映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23780135/

相关文章:

java - jpa多个双向多对一关系到同一个字段

ios - 如何在 RestKit 0.20 中接收整数值?

java - 如何声明变量

spring - 为什么使用 Spring Data 进行分页查询比普通查询慢?

java - 将 Hibernate 添加到 Spring Boot 项目

hibernate - 使用 Hibernate 让我的 webapp 与数据库无关

java - 在多列上使用投影 - 连接表

java - 将起始字母字符与数字字符分开

java - Thrift Java 服务器 - 如何配置线程

Java列表同步