有人能解释为什么这个例子中“lastAccessed”日期没有保存到数据库中,以及我如何让它保存到数据库中吗?我的理解是,在save()调用之后,do对象是一个附加的对象,因此所有修改都应该自动持久化。注意:“myDate”被正确持久化,因此所有其他Spring配置似乎都是正确的。
我也尝试了以下组合(以及更多),在save()调用之后,但是都没有起作用:
我希望这是一个容易回答的问题,只是我没有看到。谢谢你的帮助!
编辑#1 05/22/2012
如请求所示,这里是实体的映射,指定在src/main/resources/META-INF/dateobject.hbm.xml中。 我可以看到使用mysql客户端中的“SELECT * FROM dateObjects”来创建数据库中的列。 MY_DATE被正确填充,但LAST_ACCESSED设置为NULL。
@Transactional(readOnly = false)
public DateObject getOrCreateDateObject(Date myDate) {
DateObject do = null;
do = getCurrentDateObject(); // For my tests, this has been returning null
if (do == null) {
// create a new object
do = new DateObject();
do.setDate(myDate);
sessionFactory.getCurrentSession().save(do);
}
// This does not persist to the database
do.setLastAccessed(new Date());
return do;
}
我也尝试了以下组合(以及更多),在save()调用之后,但是都没有起作用:
sessionFactory.getCurrentSession().merge(do); // tried before and after do.setDate(d2)
sessionFactory.getCurrentSession().update(do);
sessionFactory.getCurrentSession().saveOrUpdate(do);
sessionFactory.getCurrentSession().flush();
DateObject doCopy = (DateObject)sessionFactory.getCurrentSession().load(DateObject.class, do.getId());
sessionFactory.getCurrentSession().merge(doCopy);
doCopy.setLastAccessed(new Date());
我希望这是一个容易回答的问题,只是我没有看到。谢谢你的帮助!
编辑#1 05/22/2012
如请求所示,这里是实体的映射,指定在src/main/resources/META-INF/dateobject.hbm.xml中。 我可以看到使用mysql客户端中的“SELECT * FROM dateObjects”来创建数据库中的列。 MY_DATE被正确填充,但LAST_ACCESSED设置为NULL。
<class name="com.example.entity.DateObject" table="dateObjects">
<id name="id" column="DATE_OBJECT_ID">
<generator class="identity" />
</id>
<property name="date" type="date" column="MY_DATE" />
<property name="lastAccessed" type="date" column="LAST_ACCESSED" />
</class>
编辑 #2 05/24/2012
我在https://github.com/eschmidt/dateobject上有一个可行的SSCCE。有趣的是,Web客户端(调用localhost:8080/view/test)显示lastAccessed已正确设置,但当我使用MySQL客户端检查数据库时,它显示lastAccessed为NULL。有了这个完整的代码集,有人能看到为什么数据库不会更新,即使该方法被标记为@Transactional吗?
DateObject
的映射吗? - Tim Pote