加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java-createSQLQuery在hibernate中使用Prepared Statement?

发布时间:2020-12-15 00:51:27 所属栏目:Java 来源:网络整理
导读:我在Hibernate中使用带有setString(无硬编码值)的createSQLQuery.我想知道Hibernate是否将createaredStatement用于createSQLQuery? 关心: 我想保留此查询在缓存中创建的执行计划,以便下次在数据库上触发相同的查询时,它将使用相同的执行计划. 仅供参考:我
我在Hibernate中使用带有setString(无硬编码值)的createSQLQuery.我想知道Hibernate是否将createaredStatement用于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链接,甚至在谷歌,所以请提供链接,如果有的话.

解决方法

我试图使用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).

我还在Hibernate createSQLQuery parameter substitution找到了一个@Alex Serna的问题,其中Alex在尝试替换表名时也得到了异常.

观察堆栈跟踪我认为Hibernate在内部使用PreparedStatement进行createSQLQuery.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读