3
这是Hibernate session thread safety的延续。所有的细节也适用于这里。在简化的计算,执行如下的图案:休眠线程安全集合
1. Read entity
2. Do expensive, easily parallelizable work
3. Persist changes
的实体被全部配置为急切装载,并且会话期间不2.
参与2
工作需要不频繁的修改在所有被访问一个持久的集合。这是我现在有:
synchronized (parentEntity) {
parentEntity.getChildEntities().add(childEntity);
}
这只是正常的,但我想“傻瓜型”这一制度,我正在寻找一种方式来尽可能下移并发控制入我可以持久层。我在DAO尝试这样做:
@Transactional
public ParentEntity getParentEntityById(long id) {
ParentEntity parent = ...;
parent.setChildren(Collections.synchronizedSet(parent.getChildren()));
return parent;
}
导致
是否有人有办法引进线程安全冬眠的集合,或者控制并发访问和修改一些其他的清洁方式一种不需要污染业务逻辑的方法?
更新 - 这是我落得这样做,每佩斯的建议:工作完成
@Transactional
public ParentEntity getParentEntityById(long id) {
ParentEntity parent = ...;
currentSession().evict(parent);
parent.setChildren(Collections.synchronizedSet(parent.getChildren()));
return parent;
}
后,我省所有的孩子和呼叫currentSession().merge(parent)
。奇迹般有效!