java.lang.IllegalStateException: Active Spring transaction synchronization or ac

在上一篇文章中,提到spring+hibernate处理oracle的blob字段,又要没有进行事务管理,导致报错如下: java.lang.IllegalStateException: Active Spring transaction synchronization or active JTA transaction with specified [javax.transaction.TransactionManager] required。 解决办法: 1、在spring配置文件中添加事务管理 <!-- spring对hibernate事物的支持 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"></property></bean><bean id="txProxyTemplate" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"><property name="transactionManager" ref="transactionManager"></property><property name="transactionAttributes"><props><prop key="save*"> PROPAGATION_REQUIRED,ISOLATION_DEFAULT,-Exception </prop><prop key="add*"> PROPAGATION_REQUIRED,ISOLATION_DEFAULT,-Exception </prop><prop key="*"> PROPAGATION_REQUIRED,ISOLATION_DEFAULT,-Exception </prop></props></property></bean> 2、在具体应用过程中,需要让你的mgr类受托管与hibernate事务,比如在我的项目中,我的application配置文件中,做如下设置: <bean id="blogArticleMgr" parent="txProxyTemplate"><property name="target"><bean class="com.tyut.blog.mgr.impl.BlogArticleImplMgr"><property name="blogArticleDao" ref="blogArticleDao"></property></bean></property></bean><bean id="blogArticleDao" class="com.tyut.blog.dao.hibernate.BlogArticleDaoHibernate"><property name="sessionFactory" ref="sessionFactory"></property></bean> 通过上面的配置,就可以解决标题的错误了。。。
@Transactional(rollbackFor = Exception.class) public void IntendedSignHandle(IntendedSignReq intendedSignReq, Map<String, IntentionEquResp> intentionEquRespMap, SaleStateEnum currentSaleStateEnum, SaleStateEnum goalSaleStateEnum) { StringBuilder message = new StringBuilder(); List<EquMarketablePrice> updateMarketablePriceList = new ArrayList<>(); for (String equNo : intendedSignReq.getEquNoList()) { Optional.ofNullable(intentionEquRespMap.get(equNo)).ifPresent(intentionEquResp -> { // 构建更新对象 if (intentionEquResp.getSaleState().equals(currentSaleStateEnum.getCode())) { EquMarketablePrice updateEquMarketablePrice = new EquMarketablePrice(); updateEquMarketablePrice.setId(intentionEquResp.getId()); updateEquMarketablePrice.setSaleState(goalSaleStateEnum.getCode()); updateEquMarketablePrice.setEditBy(intendedSignReq.getOperatorAd()); updateEquMarketablePrice.setEditByName(intendedSignReq.getOperatorName()); updateMarketablePriceList.add(updateEquMarketablePrice); } else { message.append(String.format("[%s] 当前意向状态[%s] 非[%s]状态,无法标记[%s]状态,请与资产方向确认", equNo, SaleStateEnum.getDescByCode(intentionEquResp.getSaleState()), currentSaleStateEnum.getDesc(), goalSaleStateEnum.getDesc())).append("\n"); } }); } if (CollectionUtils.isNotEmpty(updateMarketablePriceList)) { equMarketablePriceService.updateBatchById(updateMarketablePriceList, Constant.ONE_HUNDRED); } TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() { @Override public void afterCommit() { if (StringUtils.isBlank(message) ) { return; } String errorMessage = message.toString(); log.info(errorMessage); if (Boolean.TRUE.equals(intendedSignSwitch)) { alarmService.alarm("意向标记失败", errorMessage); } } }); } 允许报这个错java.lang.IllegalStateException: Transaction synchronization is not active
07-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值