1

我在我的应用程序中启用了二级和查询缓存看起来像当我调用以下代码时

String sql = "update SOME_TABLE set SOME_FIELD=somevalue";
SQLQuery query = getSession().createSQLQuery(sql);
query.executeUpdate();

休眠更新所有表的 UpdateTimestampsCache。他为什么这样做?我的应用程序中有大约 1000 个表和许多 sql 查询。我不需要此更新,因为我不通过 sql 更新缓存表。它会导致巨大的网络流量和应用程序缓慢。

有没有办法告诉休眠在运行 sql 查询时不做任何更新?

4

2 回答 2

0

您可以尝试使用StatelessSession而不是普通会话。您还可以使用直接 JDBC 代替 hibernate 的 createSQLQuery 方法。

另一种选择是使用 HQL 更新查询而不是 SQL。这可能能够确定您正在更新哪个实体,并且只会使该查询的查询结果无效。当您触发 SQL 查询时,休眠不知道正在更新哪个表 - 因此为了更安全,它会将所有查询缓存结果标记为无效。

于 2011-12-12T16:08:44.813 回答
0

我找到了解决方案!

您可以使用 addSynchronizedEntityClass() 方法

String sql = "update SOME_TABLE set SOME_FIELD=somevalue";
SQLQuery query = getSession().createSQLQuery(sql);
query.addSynchronizedEntityClass(SomeTable.class)
query.executeUpdate();

在这种情况下,它将仅重置 SOME_TABLE 的缓存

于 2012-02-13T14:39:28.727 回答