Vic*_*kor 7 java sql sql-server hibernate
我使用的是createSQLQuery与setStringHibernate中(没有硬编码值).我想知道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");
Run Code Online (Sandbox Code Playgroud)
我找不到stackoverflow链接,甚至在谷歌,所以请提供链接,如果有的话.
我试图使用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)
Run Code Online (Sandbox Code Playgroud)
从上面的异常我们可以看到它将尝试在内部执行com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2275).
我还在@Alex Serna的Hibernate createSQLQuery参数替换中找到了一个问题,其中Alex在尝试替换表名时也得到异常.
观察堆栈跟踪我认为Hibernate在内部使用PreparedStatement进行createSQLQuery.