【问题标题】:JDBC prepared statement vs hibernate session transaction readonly operationsJDBC 准备语句与休眠会话事务只读操作
【发布时间】:2017-01-30 15:22:23
【问题描述】:
我正在做一个项目,其中有很多在准备好的语句的帮助下编写的只读操作(例如在 select 中),但其他操作与休眠事务有关。
我知道事务的原因是因为如果您对数据库进行多次修改,它是某种防故障的。因此,如果一个失败,就会有一个事务回滚。
但我不知道什么是只读操作的最佳选择:我什么时候应该在休眠事务上使用准备好的语句,反之亦然?
【问题讨论】:
标签:
java
hibernate
jdbc
transactions
prepared-statement
【解决方案2】:
我不确定我是否同意将原始 JDBC PreparedStatement 用于只读 SELECT 操作并将其他所有操作委托给 Hibernate。 Hibernate 能够支持本地 SQL 查询以及只读操作。
使用 Hibernate 而不是原始 JDBC 的最大原因之一是您可以参与使用开箱即用的一级缓存支持。即使对于可能需要加载相同关系或实体的多个选择子句的只读操作,这也非常有用。
此外,您还可以参与引入二级缓存提供程序。 Ehcache 或 Infinispan 是出色的缓存提供程序,它们允许 Hibernate 在本地存储查询缓存和实体缓存,从而实现更快的结果集处理。
除此之外,它还允许生成查询的所有代码更加一致。您总是与 Hibernate 交互并选择是否使用原始原生 SQL。您甚至可以摆脱原生 SQL 并只使用 HQL/JPQL,从而使应用程序变得更少依赖数据库并且更加不可知论。