Hibernate 5 + JPA 2 不会通过连接级联删除 table
Hibernate 5 + JPA 2 doesn't cascade delete over join table
我们有这样的关系:
public class RuleProviderEntity implements Serializable
{
...
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@OrderColumn(name = RuleEntity.RULE_SEQUENCE)
private List<RuleEntity> rules;
}
仅此一项就创建了一个包含 2 个键和 RULE_SEQUENCE 列的联接 table。到目前为止还不错,适用于 SELECT。
现在有一个 JQL 查询
DELETE FROM RuleProviderEntity WHERE ...
但这无法级联删除 RuleEntity
行。它只是删除 RuleProviderEntity
并保持 RuleEntity
不变。
这是否应该在 JPA 2 中工作并且它是一个 Hibernate 错误,还是我在配置中遗漏了什么?
我知道我可以添加 @JoinTable
但它只会覆盖默认值。
另外 orphanRemoval
在这里似乎没有必要。
也许我可以用 @PreRemove
做一个解决方法,但不确定如何。
您是说发出了 JPQL 批量删除查询?而不是 em.remove()
.
批量删除查询永远不会尊重级联语义,也不打算这样做(也不会使内存中的托管对象与数据存储区保持一致)。如果你想要级联那么你需要调用em.remove()
。如果对此有疑问,请查看 JPA 规范。
我们有这样的关系:
public class RuleProviderEntity implements Serializable
{
...
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@OrderColumn(name = RuleEntity.RULE_SEQUENCE)
private List<RuleEntity> rules;
}
仅此一项就创建了一个包含 2 个键和 RULE_SEQUENCE 列的联接 table。到目前为止还不错,适用于 SELECT。
现在有一个 JQL 查询
DELETE FROM RuleProviderEntity WHERE ...
但这无法级联删除 RuleEntity
行。它只是删除 RuleProviderEntity
并保持 RuleEntity
不变。
这是否应该在 JPA 2 中工作并且它是一个 Hibernate 错误,还是我在配置中遗漏了什么?
我知道我可以添加 @JoinTable
但它只会覆盖默认值。
另外 orphanRemoval
在这里似乎没有必要。
也许我可以用 @PreRemove
做一个解决方法,但不确定如何。
您是说发出了 JPQL 批量删除查询?而不是 em.remove()
.
批量删除查询永远不会尊重级联语义,也不打算这样做(也不会使内存中的托管对象与数据存储区保持一致)。如果你想要级联那么你需要调用em.remove()
。如果对此有疑问,请查看 JPA 规范。