Hibernate 5 + JPA 2不会在连接表上级联删除

时间:2017-04-27 02:46:08

标签: jpa jpa-2.1 hibernate-5.x hibernate-cascade

我们有这种关系:

printf("First Data Set: \n");   

for (int i = 0; x[i] != SENTINEL; i++) {        
    printf("Input Data Value %d> \n", i+1);     
    scanf_s("%f", &x[i]);                       
}

仅此一项就会创建一个包含2个键和RULE_SEQUENCE列的连接表。到目前为止很好,适用于SELECT。

现在有一个JQL查询

public class RuleProviderEntity implements Serializable
{
    ...
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @OrderColumn(name = RuleEntity.RULE_SEQUENCE)
    private List<RuleEntity> rules;
}

但是这无法级联删除DELETE FROM RuleProviderEntity WHERE ... 行。它只会删除RuleEntity并保持RuleProviderEntity完好无损。

这应该在JPA 2中工作,它是一个Hibernate错误,还是我在配置中遗漏了什么?

我知道我可以添加RuleEntity,但它只会覆盖默认值 此处似乎没有必要@JoinTable 也许我可以使用orphanRemoval进行解决方法但不确定如何。

1 个答案:

答案 0 :(得分:3)

您的意思是发出JPQL批量删除查询?而不是em.remove()

批量删除查询绝不会尊重级联语义,也不是为了(也不会使内存中的托管对象与数据存储区保持一致)。如果您想要级联,则需要致电em.remove()。如果对此有疑问,请参阅JPA规范。