java - hibernate 中的createSQLQuery使用Prepared Statement?

标签 java sql sql-server hibernate

我在 Hibernate 中使用 createSQLQuerysetString(无硬编码值)。我想知道 Hibernate 是否将 PreparedStatement 用于 createSQLQuery

关注:

我想在缓存中保留此查询创建的执行计划,以便下次在数据库上触发相同的查询时,它将使用相同的执行计划。

仅供引用:我使用的是 MSSQL Server 2008

/* This is just example I'm not using same query */
Query nativeSQLQuery = session.createSQLQuery("select Firstname from user_master where user_name = :param");
nativeSQLQuery.setString("param", "vicky.thakor");

我找不到 stackoverflow 链接,甚至在 google 中也找不到,所以请提供链接(如果有的话)。

最佳答案

我尝试使用 Hibernates 的 createSQLQuery 方法执行查询,然后它会给我异常,如下所示:-

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2568)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2113)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2275)
at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
at org.hibernate.loader.Loader.doQuery(Loader.java:674)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.doList(Loader.java:2220)

从上面的异常我们可以看出它会尝试在内部执行com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2275)

我还发现@Alex Serna 在 Hibernate createSQLQuery parameter substitution 提出的问题Alex 在尝试替换表名时也遇到异常。

观察堆栈跟踪我认为 Hibernate 在内部使用 PreparedStatement 来创建 SQLQuery

关于java - hibernate 中的createSQLQuery使用Prepared Statement?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25074167/

相关文章:

mysql - SQL 按门牌号订购地址

MySQL基于列值的唯一约束

php - fetch_array 内的 sqlsvr_fetch_array

.net - 更新 SQL Server 数据库

java - 处理主 Activity 中的外部类对话框按钮

java - Android Studio - 应用程序编译,但不会运行。查看错误

java - jquery-1.7.1.min.js 编译报错

java - 使用 AWS Java SDK 将文档从 Amazon s3 上传到 CloudSearch

sql - 需要有关类型转换中 SQL Server 中的执行计划的帮助

sql - 我们可以在下拉列表的末尾设置静态值吗?