createSQLQuery对缓存的Hibernate效果

时间:2012-08-09 14:39:43

标签: sql hibernate caching

执行以下功能:

public void deleteByEntryId(long id)
{
    super.getSession().createSQLQuery("DELETE FROM guest WHERE entry_fk = " + id).executeUpdate();
}

Hibernate的缓存是否会知道/通知删除Guest对象?

  • 超级类是Spring的Hibernate模板,提供方法getSession()和许多其他
  • createSQLQuery(...)`是Hibernate的一个函数。

(我要求依赖于我是通过对象还是通过SQLquery删除我在测试中进一步得到StaleState或OtimistickLockException。)

2 个答案:

答案 0 :(得分:2)

要使Guests表缓存无效,您需要添加“addSynchronizedEntityClass”调用:

public void deleteByEntryId(long id)
{
  super.getSession()
         .createSQLQuery("DELETE FROM guest WHERE entry_fk = " + id)
         .addSynchronizedEntityClass(Guest.class)
         .executeUpdate();
}

答案 1 :(得分:-1)

不,它不会。即使是HQL更新和删除查询也不会影响内存状态。