1

我想将 JPA over JDBC 用于新应用程序。我严格使用 JPA 实体管理器的命名查询和基本 CRUD 方法,它允许我(在 Hibernate 或任何其他 JPA 实现的帮助下)提取将在数据库上执行的所有 SQL 本机查询。通过这个静态查询列表,我知道我可以构建一个 DB2 包,它是我的请求的所有执行计划。

所以我的问题是:通过 JDBC 对 DB2 执行这些查询是否会利用这些执行计划?我了解 PureQuery 产品可以捕获 sql 订单列表。它是否仍然通过 JDBC 而不是通过 PureQuery 特定的 API 提供更多?这样一个特定的 DB2 静态绑定特性?还是相当于JDBC?

感谢您的任何回答。

4

1 回答 1

4

JDBC 应用程序只执行动态 SQL(即 DB2 不使用静态包)。

只有两种方法可以获取静态 SQL(查询存储在数据库中的一个包中):使用 SQLJ(消除 JPA/Hibernate)或使用 pureQuery(位于 JDBC 和数据库之间)编写应用程序。

请记住,即使使用动态 SQL,DB2 也会缓存查询的执行计划,因此如果它们执行得足够频繁(即它们保留在缓存中),那么您将不会看到查询编译的开销。缓存仅在查询是精确的逐字节匹配时才有用,因此select * from t1 where c1 = 1与 不同select * from t1 where c1 = 2,也不是select * from t1 where C1 = 1(给出相同的结果,但查询不同)。使用参数标记 ( select * from t1 where c1 = ?) 是关键。您的 DBA 可以调整目录缓存的大小,以帮助最大化此缓存的命中率。

尽管缓存有助于避免重复编译查询,但它不能提供静态 SQL 所提供的计划稳定性,因此 YMMV。

于 2010-03-18T20:11:27.050 回答