hibernate - 数据库触发器和 hibernate

标签 hibernate caching transactions triggers

我遇到了一个情况:

  • saveupdate hibernate 的目标表中的某些数据
  • 在目标表上有一个触发器,该触发器将在目标表
  • insertupdate操作之前执行
  • 由 hibernate
  • 将此记录记录下来

    但是我发现触发器未修改的字段并没有真正被取出。
    这与Hibernate的事务提交(已经调用了flush())或Hibernate缓存有关吗?谢谢。

    最佳答案

    这可能是由于第一次( session )缓存或第二次(例如ehcache)缓存引起的。要重新读取实体,您需要调用session.refresh()。

    hibernate docs(在本节底部)

    It is possible to re-load an object and all its collections at any time, using the refresh() method. This is useful when database triggers are used to initialize some of the properties of the object.


    sess.save(cat);
    sess.flush(); //force the SQL INSERT
    sess.refresh(cat); //re-read the state (after the trigger executes)
    

    关于hibernate - 数据库触发器和 hibernate ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6980875/

    相关文章:

    java - 当我删除 List<List<String>> 中特定索引处的元素时出现 UnsupportedOperationException?

    java - JPA 乐观锁定与同步 Java 方法

    java - 并发进程向数据库中插入数据

    mysql - 两个复制主 mysql 服务器之间的事务

    php - 如何使用标签缓存MySQL数据以在需要时删除缓存?

    mysql - hbm2ddl - 如何避免 Hibernate 创建外键约束?

    Spring crud 存储库 - save() 尝试在子属性中插入多对一关系的新行

    java - 如何正确地将特定对象的列表转换为 Gson?

    ios - 我应该多久刷新一次缓存?

    caching - grails 2.4.2 ehcache 插件 1.0.5 过早地驱逐 key