我有这样的JPA实体:
@Entity
class MyEntity{
@JsonIgnore
@OneToMany(mappedBy = "application", cascade = ALL, fetch = LAZY)
private List<MyChildEnity> myChildEntities;
}
...
@Entity
class MyChildEnity {
@ManyToOne(optional = false, fetch = FetchType.LAZY, cascade = { REFRESH,
DETACH })
@JoinColumn(name = "APPLICATION_ID")
private MyEntity application;
}
我从REST调用中访问此实体。当元素数量非常大时,我尝试删除MyEntity对象,REST调用挂起然后超时。对于MyChildEnity表中的少量元素,它可以正常工作。当我调试时,我看到JPA一次取出一条记录并删除它。这太慢了,工作太多了。
这是预期的行为吗? JPA不应该是智能的,可以将它转换为MyChildEnity表上的单个DELETE调用。
我正在将OpenJPA与Derby和DB2数据库一起使用。
答案 0 :(得分:0)
为每个元素获取一个delete语句的原因可能与JPA允许您在删除前后执行某些操作有关。如果您使用delete
语句编写JPQL,则可以绕过回调机制并删除单个请求中的所有内容。