gpt4 book ai didi

spring - Hibernate 不会在保存后保留数据

转载 作者:行者123 更新时间:2023-12-04 16:00:16 24 4
gpt4 key购买 nike

有人可以解释为什么在这个例子中“lastAccessed”日期没有保存到数据库中,以及我如何让它保存到数据库中?我的理解是 do 对象是 save() 调用之后的附加对象,因此所有修改都应该自动持久化。

注意:“myDate”被正确保留,因此所有其他 spring 配置似乎都是正确的。

@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 数据库也不会更新吗?

最佳答案

如果您绝对确定在运行该代码后,do.date存储在数据库和 do.lastAccessed 中不是,那么您的连接和交易显然设置正确。我的第一个猜测是映射不正确,因为这是最简单的解决方案。你碰巧没有 @Transient在场、getter 或 setter 上 lastAccessed , 你? (当然,假设您正在使用注释来映射域对象。)

如果你能提供一个 SSCCE ,我敢打赌我或其他人可以给你一个明确的答案。

更新:很难将一个完整的应用程序修剪成尽可能小的代码来演示问题。结果是,您很可能会在其中找到答案。我有很多 sample projects in github如果您只需要朝着正确的方向轻推几下,这可能有助于指导您。 basic-springmvc可能最接近您正在做的事情,但它使用注释而不是 xml 进行映射。它也是一个 Spring MVC 项目。在主类中手动启动 Spring 上下文比担心整个 servlet 容器和 Spring MVC 希望您拥有的多个上下文要简单得多。 spring-method-caching ,例如,有一个这样做的例子。

至于你贴的映射,看起来不错,虽然我已经很久没有接触过XML映射了。您使用的是字段访问权限还是属性访问权限?这可能对事情有影响。还有,有没有定制的listenersinterceptors在 SessionFactory 中可能会摆弄您的对象?

关于spring - Hibernate 不会在保存后保留数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10712665/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com