【问题标题】:org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-onlyorg.springframework.transaction.UnexpectedRollbackException:事务回滚,因为它已被标记为仅回滚
【发布时间】:2017-10-15 11:57:57
【问题描述】:

当我执行代码时,它显示org.springframework.transaction.UnexpectedRollbackException Transaction rolled back because it has been marked as rollback-only。但它不会回滚。

我的代码:

服务水平

public void checkTransaction(Users user) throws Exception {
    adminDao.insertUser(user);
    System.out.println("Transaction active :: " + TransactionSynchronizationManager.isActualTransactionActive());
    throw (new Exception("Testing Transaction"));
}

xml

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="get*" read-only="true" />
        <tx:method name="*" propagation="REQUIRED" rollback-for="Exception" />
    </tx:attributes>
</tx:advice>

<tx:annotation-driven proxy-target-class="true"
    transaction-manager="transactionManager" />

<aop:config>
    <aop:pointcut id="serviceOperation"
        expression="execution(* myapp.admin.service.AdminService.*(..))" />
    <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceOperation" />
</aop:config>

POJO

我的 POJO (Users) Bean 不是带注释的,它映射到 hbm 文件。但它是在映射资源中注册的。

<bean id="mysessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource">
        <ref bean="dataSource" />
    </property>
    <property name="mappingResources">
        <list>
            <value>myapp/admin/vo/Users.hbm.xml</value></list>
    </property>

    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
        </props>
    </property>
</bean>

【问题讨论】:

  • rollback-for="java.lang.Exception" 也许?
  • 不。不工作。显示相同的错误。
  • adminDao.insertUser(user) 方法中可能存在异常。检查它是否工作。
  • 其实是一个测试函数。我想知道它是否正常工作。在我的情况下,'adminDao.insertUser(user)' 工作正常,它将数据插入数据库。下一行是抛出异常(手动 - 用于检查目的)。根据我的交易建议,它需要回滚,但不是。
  • 有人请吗? 帮我解决

标签: java spring hibernate spring-transactions


【解决方案1】:

我也遇到了同样的问题。发生的情况是,在服务层中,您无法进行选择类型的查询,然后再进行插入。 您需要分离进程。在我的例子中,声明一个组件类,并通过它分别调用我的服务的进程。 我希望它对你有用;)

【讨论】:

  • 如果在同一个事务中则为真。
猜你喜欢
  • 2013-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-08
  • 1970-01-01
  • 2020-10-08
相关资源
最近更新 更多