hibernate中的createSQLQuery使用Prepared Statement?
我在Hibernate中使用带有setString
(无硬编码值)的createSQLQuery
。 我想知道Hibernate是否将createSQLQuery
用于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链接,甚至在谷歌,所以请提供链接,如果有的话。
我试图使用Hibernates的createSQLQuery方法执行查询,然后它会给我exception,如下所示: –
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)
从上面的exception中我们可以看到它将尝试在内部执行com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2275) 。
我还在@Alex Serna的Hibernate createSQLQuery参数替换中找到了一个问题,其中Alex在尝试替换表名时也得到exception。
观察堆栈跟踪我认为Hibernate在内部使用PreparedStatement进行createSQLQuery 。
Hibernate SQLQuery绕过Hibernate会话缓存并仅针对数据库进行查询。 您可以通过会话缓存了解更多@ Hibernate:SQL与HQL 。
- CrudRepository和Hibernate:在事务中保存(List
)vs save(Entity) - 当Hibernate刷新会话时,它如何判断会话中的哪些对象是脏的?
- 表每子类inheritance关系:如何在不加载任何子类的情况下查询Parent类??? (hibernate)
- Spring + Hibernate =未知实体
- org.hibernate.StaleStateException:批量更新从update 返回意外的行数; 实际行数:0; 预期
- 为什么在从jndi.properties注入后在JNDI中找不到数据源?
- @Basic(fetch = FetchType.LAZY)不起作用?
- Hibernate没有在Spring Boot Project中抛出LazyInitializationException
- 如何使用hibernate透明地连接到不同的数据库(开发/测试/生产)