数据库触发器和休眠

Li.*_*Li. 6 triggers caching hibernate transactions

我遇到了一个场景:

  1. save或者updatehibernate在目标表中的一些数据
  2. 目标表上有一个触发器,它将在目标表之前执行insertupdate操作
  3. select 通过hibernate取出这条记录

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

Ste*_*ger 9

您可以将属性映射为生成的值.这些值始终来自数据库,无法存储.在插入或更新数据库之后,Hibernate会在后续查询中自动加载这些值.


Aug*_*sto 5

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

来自休眠文档(在本节底部)

可以使用 refresh() 方法随时重新加载对象及其所有集合。当数据库触发器用于初始化对象的某些属性时,这很有用。

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