【问题标题】:JDBC prepared statement vs hibernate session transaction readonly operationsJDBC 准备语句与休眠会话事务只读操作
【发布时间】:2017-01-30 15:22:23
【问题描述】:

我正在做一个项目,其中有很多在准备好的语句的帮助下编写的只读操作(例如在 select 中),但其他操作与休眠事务有关。 我知道事务的原因是因为如果您对数据库进行多次修改,它是某种防故障的。因此,如果一个失败,就会有一个事务回滚。 但我不知道什么是只读操作的最佳选择:我什么时候应该在休眠事务上使用准备好的语句,反之亦然?

【问题讨论】:

    标签: java hibernate jdbc transactions prepared-statement


    【解决方案1】:

    Prepared statements 和 transactions 具有不同的范围。

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

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

    当然你应该在必要时同时使用。

    也许你觉得这个链接有用:

    Transactions for read-only DB access?

    Advantages of using prepared statements over normal mysqli statements?

    【讨论】:

      【解决方案2】:

      我不确定我是否同意将原始 JDBC PreparedStatement 用于只读 SELECT 操作并将其他所有操作委托给 Hibernate。 Hibernate 能够支持本地 SQL 查询以及只读操作。

      使用 Hibernate 而不是原始 JDBC 的最大原因之一是您可以参与使用开箱即用的一级缓存支持。即使对于可能需要加载相同关系或实体的多个选择子句的只读操作,这也非常有用。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-08
        • 2013-12-24
        • 1970-01-01
        • 2018-11-27
        • 1970-01-01
        • 2014-07-26
        • 1970-01-01
        相关资源
        最近更新 更多