我有一个JPA实体是这样的:删除级联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 Object,REST调用会挂起然后超时。对于MyChildEnity表中的少量元素,它工作正常。当我调试时,我看到JPA一次获取一条记录并删除它。这太慢了,工作太多了。
这是预期的行为?不应该JPA智能地将其转换为MyChildEnity表上的单个DELETE调用。
我使用OpenJPA和Derby和DB2数据库。
建议您发布所调用的SQL,并计算出每个SQL的用途。例如1个SQL撤回列表中的元素,然后1个SQL撤回子项的其他字段?如果是的话哪个字段? –
是的...首先有一个SELECT获取所有元素,然后一个DELETE调用该列表中的每个条目 –