当前位置: 首页 > 知识库问答 >
问题:

如何使用Hibernate在Spring MVC中为读取操作应用事务最佳实践?

奚光霁
2023-03-14

正如在博客/书籍(例如Mark Richards的Java事务设计策略)中提到的,读操作必须具有propagation.supports属性。

    null

提前谢谢你。

编码器,以下是配置:

<tx:annotation-driven transaction-manager="txManager"/>

<context:component-scan base-package="com.myapps.service.impl" />

<bean id="txManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="${db.driverClassName}" />
    <property name="url" value="${db.url}" />
    <property name="username" value="${db.username}" />
    <property name="password" value="${db.password}" />
</bean>

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="mappingResources">
        <list>
            <value>.....</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">${db.dialect}</prop>
            <prop key="hibernate.format_sql">true</prop>
        </props>
    </property>
</bean>

共有1个答案

毋承基
2023-03-14

我不同意对读操作使用支持。必需使用。

  • 无论如何都需要一个事务来执行每个数据库操作
  • 执行几个小事务来同时读取几个内容不会从一级缓存中受益
  • 所有后续读取之间不会有任何隔离,这意味着在第一次读取中不可见的内容在第二次读取中可能会变得可见
  • 遍历关联时会出现延迟加载异常
 类似资料:
  • 为什么我需要在Hibernate中使用事务进行只读操作? 以下事务是否在数据库中设置了锁? 从数据库获取的示例代码: 我可以使用会话吗。close()而不是tx.commit()?

  • 问题内容: 参考Spring文档: 任何RuntimeException都会触发回滚,而任何选中的Exception都不会 引用javapractices.com 未经检查的异常: 表示程序中的缺陷(错误)-通常将无效的参数传递给非私有方法。引用Gosling,Arnold和Holmes的《 Java编程语言》:“未经检查的运行时异常表示的条件通常可以反映程序逻辑中的错误,并且不能在运行时从中合理

  • 问题内容: 为什么在Hibernate中需要事务才能进行只读操作? 以下事务是否在数据库中设置了锁定? 从数据库获取示例代码: 我可以 代替使用吗? 问题答案: 您实际上可能有理由将事务标记为只读。 阅读交易看起来确实很奇怪,在这种情况下,人们通常不会标记交易方法。但是JDBC仍然会创建事务,只是如果未显式设置其他选项,它将可以正常工作。 但是,不能保证您的方法不会写入数据库。如果将method标

  • 问题内容: 我们有一个大型Angularjs 1.6应用程序,该应用程序的$ rootscope分散在整个应用程序的过滤器,服务,路由等200多个位置中。因此需要对其进行重构,但是我不确定如何知道何时将其删除。什么时候在应用程序中使用$ rootscope是最佳实践? 我已经阅读了所有内容,从没读过,到用它来存储变量,我都以为是在控制器之间共享数据。从那以后,我读到最好在这种用例中使用工厂/服务,

  • 你好,虽然我读了很多其他答案,但我不明白如何关闭BufferedReader而不发送输入。这是我程序的阻塞部分: 当我从主线程调用“endListing()”时,程序终止--但不会在用户输入任何内容之前终止。我想让程序立即终止--如何启动这个BufferdReader(像BufferedReader一样创建(新的InputStreamReader(System.in))? 我试图在主线程中的这个线

  • 问题内容: 为什么在Hibernate中需要事务处理才能进行只读操作? 以下事务是否在数据库中设置了锁定? 从数据库获取示例代码: 我可以 代替使用吗? 问题答案: 你实际上可能有理由将事务标记为只读。 阅读交易看起来确实很奇怪,在这种情况下,人们通常不会标记交易方法。但是JDBC仍然会创建事务,只是如果未明确设置其他选项,它将可以正常工作。 但是,不能保证你的方法不会写入数据库。如果将metho