【发布时间】: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