hibernate中的createSQLQuery使用Prepared Statement? [英] createSQLQuery in hibernate uses Prepared Statement?
问题描述
我在Hibernate中使用 createSQLQuery
和 setString
(没有硬编码值)。我想知道Hibernate是如何为 createSQLQuery
使用 PreparedStatement
?
关注点: 我想保留由此查询创建的执行计划在缓存中,所以下一次同样的查询会触发数据库,它会使用相同的执行计划。 仅供参考我正在使用MSSQL Server 2008 我无法找到stackoverflow链接,甚至在谷歌,所以请给我提供链接,如果有的话。我试图用Hibernates的createSQLQuery方法执行一个查询,然后它会给我例外,如下所示: - $ / $> 从上面的异常中我们可以看到它会尝试在内部执行 com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2275) 。 我还在@Alex Serna的 Hibernate createSQLQuery参数替换其中Alex在尝试替换表名时也会得到异常。 观察堆栈跟踪我认为 Hibernate在内部为createSQLQuery使用PreparedStatement 。 I'm using Concern: I want to preserve the execution plan created by this query in cache so next time same query fired on database, It would use same execution plan. FYI: I'm using MSSQL Server 2008 I couldn't find stackoverflow link or even in google so please provide me link if any. I have tried to execute a query using Hibernates' createSQLQuery method then it will give me exception as below :- From the above exception we can see that it will try to execute com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2275) internally. I have also found a question by @Alex Serna at Hibernate createSQLQuery parameter substitution where Alex also get the exception while trying to substitute table name. Observing stack trace I think Hibernate uses PreparedStatement for createSQLQuery internally. 这篇关于hibernate中的createSQLQuery使用Prepared Statement?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
/ *这只是我没有使用相同查询的例子* /
查询nativeSQLQuery = session.createSQLQuery(从user_master选择名字,其中user_name =:param);
nativeSQLQuery.setString(param,vicky.thakor);
$ b
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)
在org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
在org.hibernate.loader.Loader.doList(Loader。 java:2220)
createSQLQuery
with setString
(No hard coded value) in Hibernate. I want to know that is Hibernate uses PreparedStatement
for createSQLQuery
? /* 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");
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)