数据库触发器和休眠

时间:2011-08-08 10:34:58

标签: hibernate caching transactions triggers

我遇到了一个场景:

  1. saveupdate hibernate
  2. 在目标表中的一些数据
  3. 目标表上有一个触发器,它将在目标表的insertupdate操作之前执行
  4. select hibernate
  5. 记录了这条记录

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

2 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:4)

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

来自hibernate docs(在本节底部)

  

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

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