我有个小问题。我尝试将与 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/