我在 Hibernate 中使用 createSQLQuery
和 setString
(无硬编码值)。我想知道是 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 中也找不到,所以请提供链接(如果有)。
最佳答案
我尝试使用 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 parameter substitution 上发现了@Alex Serna 提出的一个问题,其中 Alex 在尝试替换表名时也遇到了异常。
观察堆栈跟踪我认为 Hibernate 在内部使用 PreparedStatement for createSQLQuery 。
关于java - hibernate 中的 createSQLQuery 使用准备好的语句?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25074167/