【发布时间】:2011-02-26 00:41:18
【问题描述】:
休眠 3.3
如果我有动态创建休眠 hql 查询的代码,例如
String query = "from Foo where ";
if( beforeDate != null ) then query+=" createdBefore < :before";
session.createQuery(query);
将在 db 上执行的生成的 sql 是否由 SessionManager 缓存,这样如果相同的查询继续执行,它就不必每次都重新编译,或者每次都由休眠重新解析和重建?
我在想,为了提高我的数据库代码的性能,我必须在 hibernate 中编写一些静态命名查询,以减少解析开销(如果有的话)。
【问题讨论】:
-
每次生成sql。查询不会在同一会话中第二次解析(假设您使用相同的 createQuery(query) 结果)
-
啊,这很麻烦,我认为我们是这样,所以基本上你说每次调用 createQuery 时,它都会重新解析正确吗?如果是这样,我们可能应该改变我们的模式。
-
否,如果使用命名查询,则不解析字符串,但要生成sql。我对 SQL 的生成几乎持肯定态度,但我可能需要检查源代码。我自己不使用查询,而是使用标准。
-
正如 tdavies 指出的那样,导致速度变慢的主要原因应该是数据库执行,而不是休眠中的查询处理时间。