当我在Hibernate事务中执行一些查询时 - >数据在我的mysql中成功更新,但在我的应用程序中仍有旧值。当我重新开始 - 它很好。如果我设置自动提交模式 - 工作正常,但我必须使用交易;-)。有任何想法吗? 提前谢谢。
答案 0 :(得分:1)
使用UPDATE直接操作数据库不会影响会话中缓存的对象。您应该清除会话(Session.clear())。类似的东西:
session.flush()
session.clear()
query.executeUpdate()
或者甚至更好,您可以通过不使用更新查询和操纵内存中的对象状态来避免此问题:
myobj.setName(newValue)
session.saveOrUpdate(myobj)
答案 1 :(得分:0)
在hibernate
中,您使用的是JPA API
或Hibernate的本机API,您使用以下界面运行的任何查询
查询不与第二级或第一级缓存交互。它们直接命中数据库。如果您的查询正在更新当前持久化上下文中的实体,那些实体将不会反映更改。这是默认行为。
为了更新您的上下文以显示实体的最新状态,请使用Session或EntityManager中的refresh()来反映持久化上下文中的最新实体状态。 阅读以下文档以获取更多信息
http://docs.oracle.com/javaee/7/api/javax/persistence/EntityManager.html#refresh-java.lang.Object-
否则作为约定总是在加载持久化上下文中的任何数据之前运行DML
。
希望这会有所帮助:D