Sam*_*Sam 7 performance hibernate jpa
当我尝试执行entityManager.remove(实例)时,基础JPA提供程序会在每个GroupUser实体上发出单独的删除操作.从性能角度来看,我认为这是不正确的,因为如果一个组有1000个用户,则会发出1001个调用来删除整个组和itr groupuser实体.
编写命名查询以删除groupuser表中的所有条目(例如从group_user中删除group_id =?)更有意义,因此我只需要进行2次调用即可删除该组.
@Entity
@Table(name = "tbl_group")
public class Group {
@OneToMany(mappedBy = "group", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@Cascade(value = DELETE_ORPHAN)
private Set<GroupUser> groupUsers = new HashSet<GroupUser>(0);
Run Code Online (Sandbox Code Playgroud)
简单的答案是肯定的.如果你想删除a Group
并且你知道GroupUser
表中有大量的记录,那么创建一个删除查询会更好,这个查询将在一个批处理而不是一个批处理中执行.
如果你没有底层数据库的级联,(或者即使你这样做),它的良好做法是按正确的顺序执行.
所以删除第GroupUser
一个.
假设您有要删除的Group对象.
int numberDeleted = entityManager.createQuery("DELETE FROM GroupUser gu WHERE gu.group.id=:id").setParameter("id",group.getId()).executeUpdate();
Run Code Online (Sandbox Code Playgroud)
返回的int显示删除的记录数.
现在你终于可以删除了 Group
entityManager.remove(group);
entityManager.flush();
Run Code Online (Sandbox Code Playgroud)
UPDATE
好像@OnDelete
在@OneToMany
做的伎俩
归档时间: |
|
查看次数: |
12458 次 |
最近记录: |