java - @transaction - 回滚失败

标签 java spring hibernate transactions spring-transactions

@Override
    @Transactional(rollbackFor = { RuntimeException.class, Exception.class}, propagation = Propagation.REQUIRED)
    public String upload(ObjectVO vo) throws CustomException {
    .......
    }

在此服务中,我将插入到两个表中。如果在处理应该在第一个表之后插入的第二个表的数据(例如强制字段检查)时出现异常,是否应该回滚在同一事务中插入第一个表中的数据?就我而言,我没有将其回滚。预期的行为是什么? (是的,我没有捕获异常,它是一个自定义异常,包含在 rollbackFor 子句中,并且正在抛出)
(我正在使用 hibernate ) DAO 层执行 getSession().save(entity); (getSession() 返回 currentSession)

(所以第一个表中的数据仍然存在)

这些表不相关。

<tx:annotation-driven/>

<bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
        lazy-init="true">
        <property name="dataSource" ref="dataSource" />
    </bean>

最佳答案

您确定代理实际上应用于方法调用吗?

假设您使用经典的动态代理(而不是aspectJ代理),您可以确保从其类的外部调用该方法吗?

[编辑] 如果您使用 Hibernate,请将事务管理器切换到 HibernateTransactionManager

关于java - @transaction - 回滚失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22862006/

相关文章:

java - 在 Java 中将整数转换为字符

java - 将 Java 日期时间与当前时间进行比较

java - 检查数组是否已满

android - Spring 3/Square Retrofit - MultipartParams 但没有 MultipartFiles

java - Spring中如何使用@Transactional

java - JAVA中一维数组转换为二维数组

java - 从 Controller 到 jsp 的对象列表和 <c :forEach>

spring - 访问被拒绝(用户是匿名的);重定向到身份验证入口点

sql - 将三个表连接成一个连接表

java - hibernate无法获取下一个序列值