Java JDBC准备语句与hibernate会话事务只读操作

Java JDBC准备语句与hibernate会话事务只读操作,java,hibernate,jdbc,transactions,prepared-statement,Java,Hibernate,Jdbc,Transactions,Prepared Statement,我正在从事一个项目,在这个项目中,有许多只读操作(如select)是在准备好的语句的帮助下编写的,但其他操作是使用hibernate事务的。 我知道事务的原因是,如果您对数据库进行多次修改,它可以防止故障。因此,如果其中一个失败,则会发生事务回滚。 但我不知道只读操作最好使用什么:什么时候应该在hibernate事务上使用预处理语句,反之亦然?预处理语句和事务具有不同的作用域 您应该使用准备好的语句来防止SQL注入,并使代码更具可读性、安全性和可重用性 您可以使用事务来控制事务性(提交和回滚)、

我正在从事一个项目,在这个项目中,有许多只读操作(如select)是在准备好的语句的帮助下编写的,但其他操作是使用hibernate事务的。 我知道事务的原因是,如果您对数据库进行多次修改,它可以防止故障。因此,如果其中一个失败,则会发生事务回滚。
但我不知道只读操作最好使用什么:什么时候应该在hibernate事务上使用预处理语句,反之亦然?

预处理语句和事务具有不同的作用域

您应该使用准备好的语句来防止SQL注入,并使代码更具可读性、安全性和可重用性

您可以使用事务来控制事务性(提交和回滚)、设置超时、隔离级别和锁定模式

当然,必要时你应该同时使用这两种方法

也许您会发现以下链接很有用:


我不太确定我是否同意使用原始JDBC
PreparedStatement
进行只读
操作,并将其他操作委托给Hibernate。Hibernate能够支持本机SQL查询和只读操作

在原始JDBC上使用Hibernate的最大原因之一是,您可以参与使用开箱即用的一级缓存支持。即使对于只读操作,这也是非常好的,在只读操作中,您可能会发出多个select子句,这些子句可能需要加载同一关系或实体

此外,您还可以参与引入第二级缓存提供程序。Ehcache或Infinispan是很好的缓存提供程序,它们允许Hibernate在本地存储查询缓存和实体缓存,从而可以更快地处理结果集

除此之外,它还允许生成查询的所有代码更加一致。您总是与Hibernate交互,并选择是否使用原始本机SQL。您甚至可以脱离本机SQL,也只使用HQL/JPQL,从而使应用程序变得更少依赖于数据库,更不可知