Hibernate事务问题

时间:2009-12-23 17:33:05

标签: java hibernate

当我在Hibernate事务中执行一些查询时 - >数据在我的mysql中成功更新,但在我的应用程序中仍有旧值。当我重新开始 - 它很好。如果我设置自动提交模式 - 工作正常,但我必须使用交易;-)。有任何想法吗? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

使用UPDATE直接操作数据库不会影响会话中缓存的对象。您应该清除会话(Session.clear())。类似的东西:

session.flush()
session.clear()
query.executeUpdate()

或者甚至更好,您可以通过不使用更新查询和操纵内存中的对象状态来避免此问题:

myobj.setName(newValue)
session.saveOrUpdate(myobj)    

答案 1 :(得分:0)

hibernate中,您使用的是JPA API或Hibernate的本机API,您使用以下界面运行的任何查询

  1. 条件(Hibernate Native API)
  2. 查询(Hibernate Native API)
  3. EntityManager createQuery()(JPA)
  4. 查询不与第二级或第一级缓存交互。它们直接命中数据库。如果您的查询正在更新当前持久化上下文中的实体,那些实体将不会反映更改。这是默认行为。

    为了更新您的上下文以显示实体的最新状态,请使用Session或EntityManager中的refresh()来反映持久化上下文中的最新实体状态。 阅读以下文档以获取更多信息

    http://docs.oracle.com/javaee/7/api/javax/persistence/EntityManager.html#refresh-java.lang.Object-

    https://docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/Session.html#refresh%28java.lang.Object%29

    否则作为约定总是在加载持久化上下文中的任何数据之前运行DML

    希望这会有所帮助:D