场景时在SSH2下的Service层。
某service中
java
... // 查询事件模板 CommonEvent event = commonEventDao.find(code); // 模版内容是"${name}登录" String template = event.getTemplate(); template = template.replaceAll("\\$\\{name\\}", "admin"); event.setTemplate(template); // 其他service的调用 ...
上边DAO的查询:
java
public CommonEvent find(String code) { return (CommonEvent) sessionFactory0.getCurrentSession().get(CommonEvent.class, code); }
然后service结束后,数据库中的event纪录中的template字段从 ${name}登录
变成了 admin登录
,原因在哪里呢?
如果在find查询时使用session.evict(event)将该对象逐出,则不会有脏写的问题。
如果不使用evict方法该怎么处理?
new一个CommonEvent类型的对象event2,把event的属性值copy一份过来,repalceAll后的内容放到event2里去。应该是当前的逻辑代码中,event还是持久态,所以最后提交事务后,把event的内容也更新到数据库了。