我遇到了一个场景:
save
或update
hibernate insert
或update
操作之前执行select
hibernate 但是我发现触发器修改过的字段并没有被真正取出。 这与Hibernate的事务提交(flush()已经被调用)或Hibernate缓存有关吗?感谢。
答案 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)