hibernate - 一对多多关系

标签 hibernate jpa

考虑下面提到的两个表 -
表1(id_col,name_col)
表2(uid_col、code_col_1、code_col_2)

其中,
id_col 是 Table1 的主键
uid_col 是 Table2 的主键
并且 id_colcode_col_1code_col_2 具有一对多关系

记录可能如下所示:-
表1
1、xxx
2、yyy

表2
11, 1, 2
12, 2, 1
12, 2, 2

JPA 在以下类中会是什么样子?

@Entity
@Table(name = "Table1")
public class T1 {
    @OneToMany(targetEntity=T2.class, mappedBy="??????", cascade=CascadeType.ALL)
    private List<T2> t2; //???not sure about this
}

@Entity
@Table(name = "Table2")
public class T2 {
    @ManyToOne
    @JoinColumn(name="code_col_1")
    private T1 t1;  //???not sure what goes here
}

最佳答案

这不是一对多关联;相反,它是从 T2T1 的两个独立的多对一关联。您可以将两者映射到 T2 一侧:

@Entity
@Table(name = "Table2")
public class T2 {
  @Id // map whatever generator you'd like
  private long id;

  @ManyToOne
  @JoinColumn(name="code_col_1")
  private T1 t1_code1;

  @ManyToOne
  @JoinColumn(name="code_col_2")
  private T1 t1_code2;
}

将反向一对多关联从 T1 映射到 T2 并不是一个好主意,因为您可能会冒在两个集合中拥有(某些)相同元素的风险会导致插入/删除时出现各种麻烦。

关于hibernate - 一对多多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5989430/

相关文章:

java - 如何使用 Hibernate @Any 相关的注解?

Hibernate:如何处理 'saving'数据库中可能存在或不存在的 transient 对象

java - Criteria Builder 基于字符串 - 表达式引用为 double - JPA

java - 无法在Spring Boot和Data JPA中使用 native 查询方法访问数据记录

java - JPA 内部运作。 MySQLIntegrityConstraintViolationException

java - 如何使用 JPA 保存 Map<Entity, Integer>?

java - 复制 @ElementCollection 行为

java - MySQL 日期时间 <-> Java 日期

java - Hibernate,JPA无法删除一对多关系

java - 如何使用 Hibernate 作为持久性提供程序在 JPA 中添加 "outer join conditions with ON clause"?