簡體   English   中英

hibernate中的createSQLQuery使用Prepared Statement?

[英]createSQLQuery in hibernate uses Prepared Statement?

我在Hibernate中使用帶有setString (無硬編碼值)的createSQLQuery 我想知道這是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鏈接,甚至在谷歌,所以請提供鏈接,如果有的話。

我試圖使用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參數替換中找到了一個問題,其中Alex在嘗試替換表名時也得到異常。

觀察堆棧跟蹤我認為Hibernate在內部使用PreparedStatement進行createSQLQuery

Hibernate SQLQuery繞過Hibernate會話緩存並僅針對數據庫進行查詢。 您可以通過會話緩存了解更多@ Hibernate:SQL與HQL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM