hibernate中的createSQLQuery使用Prepared Statement?

我在Hibernate中使用带有setString (无硬编码值)的createSQLQuery 。 我想知道Hibernate是否将createSQLQuery用于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方法执行查询,然后它会给我exception,如下所示: –

 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) 

从上面的exception中我们可以看到它将尝试在内部执行com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2275)

我还在@Alex Serna的Hibernate createSQLQuery参数替换中找到了一个问题,其中Alex在尝试替换表名时也得到exception。

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

Hibernate SQLQuery绕过Hibernate会话缓存并仅针对数据库进行查询。 您可以通过会话缓存了解更多@ Hibernate:SQL与HQL 。