Hibernate合并和刷新不会持久更改对象

 垚垚8858 发布于 2023-02-09 09:36

这是关于更新数据库中对象的Hibernate/JPA问题.

我有一个使用entityManager.persist(object)在另一个事务中创建的对象.

返回此对象,然后更新某些值.然后在另一个使用@Transactional注释的方法中进行调用.此方法调用基类中的合并方法(如下所示).

在以下代码中,rvalue具有已修改的信息,直到调用刷新为止.调用刷新后,数据将恢复为原始值.

我希望对flush()的调用会将信息保存到数据库中.

我试着评论刷新调用,认为保存不会发生,直到我将方法包装在事务中.但是,我仍然发现这些变化并未持续存在.

关于可能发生的事情的任何想法将不胜感激!

@Override
public T merge(T object) {
    T rvalue = entityManager.merge(object);
    entityManager.flush();
    entityManager.refresh(rvalue);
    return rvalue;
}

Todd Patch.. 8

我弄清楚问题是什么.事实证明这个问题与entityManager或@Transaction设置没有关系.这是实体.我试图更新的其中一个字段标记为updatable = false.一旦我找到并更改了该参数,一切都很好.我习惯在定义它的getter上的@Column注释上看到这个设置,但发现它在派生类中被@AttributeOverride注释覆盖了.

虽然这是一个简单而不复杂的原因和修复,但实现目标的途径却存在问题.在我的所有故障排除中(单步执行代码,打开Hibernate和Spring的日志等等),我没有遇到由于此约束导致更新失败的任何异常.

1 个回答
  • 我弄清楚问题是什么.事实证明这个问题与entityManager或@Transaction设置没有关系.这是实体.我试图更新的其中一个字段标记为updatable = false.一旦我找到并更改了该参数,一切都很好.我习惯在定义它的getter上的@Column注释上看到这个设置,但发现它在派生类中被@AttributeOverride注释覆盖了.

    虽然这是一个简单而不复杂的原因和修复,但实现目标的途径却存在问题.在我的所有故障排除中(单步执行代码,打开Hibernate和Spring的日志等等),我没有遇到由于此约束导致更新失败的任何异常.

    2023-02-09 09:42 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有