hibernate - 多对多关系jpa中的补充属性

标签 hibernate jpa attributes

我有个小问题。我尝试将与 pojo 和 jpa 的关系表示为以下映射:

table A :
id_a (PK)
nom_a

table B :
id_b (PK)
nom_b

intermediate table :
id_a(PK), id_b(PK)
quantity

我的中间表包含一个复合键id_a(PK), id_b(PK)。

我希望我的建模允许我: 当我从表 a 或表 b 中删除一个项目时,需要中间表的元素被瀑布删除

最佳答案

您应该使用此补充字段和对两个实体的双向引用创建一个中间实体。该实体应通过@ManyToOne 关系引用基础实体,而基础实体应通过@OneToMany 关系引用该中间实体。

@OneToMany 引用的 cascade 属性应设置为 CascadeType.REMOVE,如果您希望在删除任何连接项时自动删除此中间实体.

这是示例映射(省略了 getter 和 setter):

@Entity
public class FirstEntity implements Serializable {
    @Id
    @GeneratedValue
    private Long id;

    @OneToMany(mappedBy = "firstEntity", cascade = CascadeType.REMOVE)
    private Set<IntermediateEntity> intermediates = new HashSet<>();
}

@Entity
public class SecondEntity implements Serializable {
    @Id
    @GeneratedValue
    private Long id;

    @OneToMany(mappedBy = "secondEntity", cascade = CascadeType.REMOVE)
    private Set<IntermediateEntity> intermediates = new HashSet<>();
}

@Entity
public class IntermediateEntity implements Serializable {
    @Id
    @GeneratedValue
    private Long id;

    private Long quantity;

    @ManyToOne
    @JoinColumn(name = "first_entity_id")
    private FirstEntity firstEntity;

    @ManyToOne
    @JoinColumn(name = "second_entity_id")
    private SecondEntity secondEntity;
}

关于hibernate - 多对多关系jpa中的补充属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30464198/

相关文章:

java - 如何从父序列值填充子复合键(Hibernate、JPA)?

java - hibernate 时无法保存数据

mysql - 我如何告诉 Hibernate 通过外键指向的实体删除表行?

Javascript - IE6+ 上正确的 getAttributeNode

java - 在 com.tct.model.Car 类上找不到 ID 的 setter

java - 如何在 Hibernate 中为多个表做 XML 映射

java - 使用 JPA 存储库查询三个属性

java - 如何回滚 Play 框架中捕获的异常?

javascript - 通过 jQuery 从标题到数据-*?

c# - 在 C# 属性中替换字符串