一尘不染

Hibernate中的createSQLQuery使用Prepared Statement吗?

hibernate

我使用的是createSQLQuerysetStringHibernate中(没有硬编码值)。我想知道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链接,甚至在Google中也找不到,所以请提供我的链接(如果有)。


阅读 438

收藏
2020-06-20

共1个答案

一尘不染

我试图使用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)

我还在Hibernate
createSQLQuery参数替换
处发现了@Alex Serna的问题,其中Alex在尝试替换表名时也得到了异常。

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

2020-06-20