在项目开发中需要用到手动事务进行控制。现说下遇到的问题以及解决方案:
如果程序需要使用嵌套事务,则需要在配置文件中添加一个配置属性,如下:
代码语言:javascript复制<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
<property name="nestedTransactionAllowed" value="true"/>
</bean>
如果需要手动事务进行控制,可以使用PlatformTransactionManager代码如下
代码语言:javascript复制DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_NESTED);
PlatformTransactionManager txManager =
(PlatformTransactionManager) BeanLocator.getInstance().getBean("transactionManager");
TransactionStatus transactionStatus = txManager.getTransaction(def);
try {
} catch (Exception e) {
logger.error("处理基地同步结算单出错" settlement.toString(), e);
txManager.rollback(transactionStatus);
throw new XmlHttpException(IoddConstant.PRM_OTHER_ERROR,"处理发布结算单消息失败");
}
如果是结合声明式事务进行控制,可以使用下面代码:
代码语言:javascript复制TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();