我有点问题。我尝试将与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中删除一个项目时,b将要求中间表的元素被瀑布删除
答案 0 :(得分:1)
您应该使用此辅助字段创建一个中间实体,并对两个实体进行双向引用。该实体应通过@ManyToOne
关系引用基础实体,基础实体应通过@OneToMany
关系引用该中间实体。
cascade
引用的@OneToMany
属性应设置为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;
}