许多关系中的补充属性jpa

时间:2015-05-26 16:34:31

标签: 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中删除一个项目时,b将要求中间表的元素被瀑布删除

1 个答案:

答案 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;
}