Java hibernate中的createSQLQuery是否使用预处理语句?

Java hibernate中的createSQLQuery是否使用预处理语句?,java,sql,sql-server,hibernate,Java,Sql,Sql Server,Hibernate,我正在Hibernate中使用createSQLQuery和setString(无硬编码值)。我想知道Hibernate是否为createSQLQuery使用PreparedStatement 关注点: 我希望将此查询创建的执行计划保留在缓存中,以便下次在数据库上触发相同的查询时,它将使用相同的执行计划 仅供参考:我正在使用MSSQL Server 2008 /* This is just example I'm not using same query */ Query nativeSQLQu

我正在Hibernate中使用
createSQLQuery
setString
(无硬编码值)。我想知道Hibernate是否为
createSQLQuery
使用
PreparedStatement

关注点:

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

仅供参考:我正在使用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中也找不到,所以如果有链接,请提供给我。

Hibernate SQLQuery绕过Hibernate会话缓存,只对数据库进行查询。您可以阅读更多@。

我尝试使用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提出的一个问题,Alex在尝试替换表名时也出现了异常


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

每次执行查询时都使用nativeSQLQuery。只需在执行之前设置参数。@Darshan Lila在您的回答中有一定的意义。你的答案没有任何意义…这是回答问题的一种奇怪方式,但我喜欢这种方式。。。我找到了另一种证明hibernate使用PreparedStatement的方法。无论如何,谢谢。在SQL Server上执行
DBCC FREEPROCCACHE DBCC DROPCLEANBUFFERS GO
,然后在hibernate中执行任何
select
查询,然后执行
选择使用计数、大小(以字节为单位)、cacheobjtype、sys.dm_exec_cached_计划中的文本交叉应用sys.dm_exec_SQL_文本(计划句柄),其中cacheobjtype!='在SQL server中分析树“