2012-10-13 74 views
0

我注意到调用带有简单select的服务方法会使DB中的MyDomain.class日期字段更新(清除时间)。然而用@Transactional(readOnly = true)封装方法不会更新日期值。选择后自动保存

为什么将值保存到数据库中?

这里的服务方法

@Transactional(readOnly = true) 
Date getDate() 
{ 
    Date date = null 
    date = MyDomain.executeQuery("select min(s.startDate) from MyDomain s where ....)[0] 
    print "Result: " + date 

} 
+0

提供了MyDomain类的定义,您可能已经通过读取方式更新自己的方式来定义它。另外..有可能你的查询返回不同的对象,因此日期是不同的? – Krystian

回答

2

对象将只在数据库中保存更新,如果以某种方式改变后,进入休眠会话(选择)和会话时(通常是在之前方法的结尾)。看看你的对象,并看看它可能会以某种你不打算修改的方式。

+0

实际上对象没有改变。在事务结束之前,我添加了print语句来检查从数据库中检索到的结果。 结果如下: 1.无@Transactional(readOnly = true)结果:2012-10-20 00:00:00.0 2.使用@Transactional(readOnly = true):2012-10-20 17: 00:00.0 – syllepsa