Ham*_*zeh 5 hibernate transactional
嗨,
我有一个hibernate实体,它有一组另一个实体作为其字段.像这样的东西:
public class UserEntity implements Srializable {
private Set<Role> roles;
}
Run Code Online (Sandbox Code Playgroud)
我应该以一种方式保留表,即系统中始终存在至少一个ADMIN用户.这可以通过简单的方式完成,如下所示:
public void updateUser{
UserEntity ue = getUser();
if (userIsNotTheLastAdmin(ue)) {
/** Here is a race condition **/
roles.remove(Role.ADMIN);
getSession().saveOrUpdate(ue);
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我们进行并发操作时会发生真正的问题.如何以原子方式执行所有操作?
谢谢,
HM
因为您可能不想锁定整个数据库表,这是一件非常邪恶的事情,所以您可以在组表中拥有一个带有 usercount 值的字段,然后您可以将事务跨越用户表操作和更新组表中相应的字段值,并确保特定组的用户计数不低于 1。由于 hibernate 自动获取更新的写锁,因此您不必考虑手动锁定策略,如下所述:http://docs.jboss .org/hibernate/core/3.3/reference/en/html/transactions.html#transactions-locking
希望有帮助..
| 归档时间: |
|
| 查看次数: |
2808 次 |
| 最近记录: |