【发布时间】:2017-10-19 17:32:49
【问题描述】:
假设我有两个实体:组织和用户。每个用户都可以是多个组织的成员,每个组织都可以有多个用户。
@Entity
public class User {
@ManyToMany
Set<Organization> organizations;
//...
}
@Entity
public class Organization {
@ManyToMany(mappedBy="organizations")
Set<User> users;
//...
}
现在,我想删除一个组织(假设它有 1000 个成员)。 当用户的组织很少时,这段代码就可以了:
void removeOrgFromUser(Integer userId,Integer orgId){
User user = session.load(User.class, userId);
for (Organization org : user.organizations) {
if(org.getId().equals(orgId))
user.organizations.remove(org);
}
session.update(user);
}
但当组织数为 10,000 时,此解决方案的性能不佳。
我该如何解决?
【问题讨论】:
-
从连接表中删除行。
-
我想用 hibernate 或 hql 做到这一点,
-
@Antoniossss 使用 sql native?
-
是的,使用带有 user_id 和 departament_id 标准的准备好的语句
-
从这里尝试 JBNizet 的答案:stackoverflow.com/questions/8699153/… 在删除组织之前清除组织中的用户集合。另一种方法是按照@Antoniossss 的建议通过 SQL。
标签: java hibernate jpa orm many-to-many