您好
我有一个hibernate实体,它有一组另一个实体作为它的字段。像这样:
public class UserEntity implements Srializable {
private Set<Role> roles;
}
我应该以一种方式保留表,即系统中始终存在至少一个ADMIN用户。这可以通过简单的方式完成,如下所示:
public void updateUser{
UserEntity ue = getUser();
if (userIsNotTheLastAdmin(ue)) {
/** Here is a race condition **/
roles.remove(Role.ADMIN);
getSession().saveOrUpdate(ue);
}
}
但真正的问题发生在我们进行并发操作时。如何以原子方式执行所有操作?
感谢,
HM
答案 0 :(得分:1)
因为你可能不想锁定一个完整的数据库表,这是一个非常邪恶的事情,你可以在你的组表中有一个带有usercount值的字段,然后你可以跨越用户表操作和更新组表中相应的字段值,并确保特定组的用户数不会低于1.因为hibernate会自动获取更新的写锁,您不必考虑手动锁定策略,如下所述:{{3} }
希望有所帮助..