hibernate中的createSQLQuery使用Prepared Statement? [英] createSQLQuery in hibernate uses Prepared Statement?

查看:131
本文介绍了hibernate中的createSQLQuery使用Prepared Statement?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Hibernate中使用 createSQLQuery setString (没有硬编码值)。我想知道Hibernate是如何为 createSQLQuery 使用 PreparedStatement



关注点:

我想保留由此查询创建的执行计划在缓存中,所以下一次同样的查询会触发数据库,​​它会使用相同的执行计划。



仅供参考我正在使用MSSQL Server 2008

  / *这只是我没有使用相同查询的例子* / 
查询nativeSQLQuery = session.createSQLQuery(从user_master选择名字,其中user_name =:param);
nativeSQLQuery.setString(param,vicky.thakor);

我无法找到stackoverflow链接,甚至在谷歌,所以请给我提供链接,如果有的话。我试图用Hibernates的createSQLQuery方法执行一个查询,然后它会给我例外,如下所示: - $ / $>

解决方案

b
$ 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)

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

我还在@Alex Serna的 Hibernate createSQLQuery参数替换其中Alex在尝试替换表名时也会得到异常。



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


I'm using createSQLQuery with setString (No hard coded value) in Hibernate. I want to know that is Hibernate uses PreparedStatement for createSQLQuery?

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

/* 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");

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 :-

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)

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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆