代码之家  ›  专栏  ›  技术社区  ›  Brandon Yarbrough

hql更新和域对象

  •  1
  • Brandon Yarbrough  · 技术社区  · 15 年前

    我有一个基本的冬眠问题。hql(和/或条件)更新查询是否会导致对活动域对象的更新?它们是否会从一级缓存中自动刷新无效的域对象?

    例子:

    Player playerReference1 = session.get(Player.class,1);
    session.createQuery("update players set gold = 100").executeUpdate();
    //Question #1 -- does playerReference1.getGold() now return 100?
    Player playerReference2 = session.get(Player.class,1);
    //Question #2 -- does playerReference2.getGold() return 100, or is it the same exact object?
    

    如果以后有可能有些代码需要,我是否应该尝试逐出受hql更新影响的所有对象?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Matt Solnit    15 年前

    两个问题的答案都是否定的。 Java Persistence with Hibernate ,第12章:

    如果执行直接对数据库中的行进行操作的SQL语句,则所做的任何更改都不会影响内存中的对象(无论它们处于何种状态)。换句话说,任何直接dml语句都会绕过hibernate持久性上下文(和所有缓存)。

    这也适用于hql。他们建议在从会话加载任何对象之前执行dml。