当Hibernate不生成最佳查询时。如何使hibernate生成最佳查询

时间:2016-11-07 13:34:59

标签: java database oracle hibernate orm

虽然像hibernate这样的ORM框架确实简化了在RDBMS中访问和修改数据的活动。它的功能如延迟加载,缓存等也有助于在正确使用时提高应用程序性能 但我想到的是,如果查询生成器或优化器没有使用最佳查询 - 比如在连接期间没有遵循正确的表排序而不使用最合适的连接策略等。
如何优化查询或说hibernate以生成更好的查询,该查询比默认生成的查询更优化。

(可能如果我没错,这个问题也适用于其他ORM框架,如iBATIS等)

按照S. Bhattacharjee的回答编辑 - 我也希望Hibernate能够生成最佳的最佳查询。但另一方面,即使在Oracle GUI中使用Oracle SQL执行程序,优化程序也不会使用最佳计划。但我可以通过更具体地编写查询来影响它。 (不要问我是怎么做的,如果有人知道请说明。我不是SQL专家。我需要分析这个案例以确保系统灵活性和优化不受限制,因为框架)。所以
CASE 1 - 考虑hibernate没有生成最佳查询。那么如何影响它以产生最佳查询 案例2 - hibernate正在生成最佳查询。但是SQL引擎正在使用一个不是最优的计划。查询和计划(或执行)与我的理解不同。我不确定这是否是一个有效的案例。如果不适用,请忽略。但是,如果有人认为这是一个有效的案例,即使他们无法回答,PLZ也会发表评论来支持这一点。

接下来谈谈Hibernate查询生成器 - 另一个问题出现在我的脑海中。 Hibernate是否了解DB的逻辑结构(我不希望它知道物理设计,并且可能与此处无关)。 a)如果它确实知道逻辑数据库设计,它是如何知道它的 b)如果它不知道逻辑数据库设计,那么如何确保查询是最优的。

1 个答案:

答案 0 :(得分:0)

嗯,在我看来,hibernate会产生一个很好的最佳查询。请更清楚你说的理由是什么,可能有一个例子?但是,如果您愿意,您可以编写自己的SQL查询。以下是一个非常小的例子

Query query = session.createSQLQuery("select c.codename from 
codes c where c.code = :paramcode")
.setParameter("paramcode", "900");
List result = query.list();