package com.yetistep.dboy.business.impl;
@Service
@Transactional
public class TestServiceImpl implements TestService {
@Autowired
TestDaoService testDao;
@Autowired
CustomerDaoService customerService;
@Override
@Transactional //I supposed propagation control from aop config
public Boolean saveMulTransactions(User user, Customer customer) throws Exception {
testDao.saveUser(user);
customerService.saveCustomer(customer);
return true;
}
}
public class TestDaoServiceImpl implements TestDaoService {
@Autowired
SessionFactory sessionFactory;
Session session = null;
Transaction tx = null;
@Override
public boolean saveUser(User user) throws Exception {
session = sessionFactory.openSession();
tx = session.beginTransaction();
session.save(user);
tx.commit();
session.close();
return false;
}
}
public class CustomerDaoServiceImpl implements CustomerDaoService{
@Autowired
SessionFactory sessionFactory;
Session session = null;
Transaction tx = null;
@Override
public boolean saveCustomer(Customer customer) throws Exception {
session = sessionFactory.openSession();
tx = session.beginTransaction();
session.save(customer);
tx.commit();
session.close();
return false;
}
}
public @ResponseBody
ServiceResponse createAdmin(@RequestBody User user) throws Exception{
log.debug("Saving User to Database");
ServiceResponse serviceResponse = null;
try {
Customer customer = new Customer();
customer.setName("Jeka");
customer.setContact("87897898788978979");
customer.setContact("Ktm");
testService.saveMulTransactions(user, customer);
serviceResponse = new ServiceResponse("User Added Successfully!!!");
} catch (Exception e) {
e.printStackTrace();
}
return serviceResponse;
}
<tx:annotation-driven transaction-manager="transactionManager"/>
<!-- MUST have transaction manager, using aop and aspects -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true" />
<tx:method name="find*" read-only="true" />
<tx:method name="*" propagation="REQUIRED" rollback-for="Throwable"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="userServicePointCut"
expression="execution(* com.yetistep.dboy.business.impl.*ServiceImpl.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="userServicePointCut" />
</aop:config>
为什么它要回滚...您自己打开新会话,也自己管理事务。Spring怎么会知道。
你的daos在很多方面都是错误的。
OpenSession
public class CustomerDaoServiceImpl implements CustomerDaoService{
@Autowired
SessionFactory sessionFactory;
@Override
public boolean saveCustomer(Customer customer) throws Exception {
Session session = sessionFactory.getCurrentSession();
session.save(customer);
return false;
}
}
在我的一般问题之后,我有一个使用Spring的特定问题,我想在下面每次执行DAO方法后回滚特定的测试方法。 添加和未能回滚插入 此外,在之前/之后获取连接并回滚也不会产生影响 我应该如何使用TestNG框架回滚单元测试?大多数答案使用JUnit的 我未能使用TestNG自动接线: 但是成功地使用了和include配置类includes jdbcTemplate/DataStource TestNG
我在Spring Boot应用程序中有一个Javers实现。Mongo4.4被用作数据库。从MongoDB4.4开始,您可以在事务中创建文档。 我在创建对象时模拟了一个异常。如预期的那样,对象没有在数据库中创建,但是一个新的快照被添加到jv_snapshots集合中。 控制器:
我有一个应用程序,它使用spring 4 . 0 . 1 JPA hiba Nate 4 . 2 . 8(spring的JpaTransactionManager,localcontainereentitymanagerfactorybean,带有HibernateJpaDialect和apache的BasicDataSource作为数据源)进行数据库访问。在某个时刻,应用程序开始一个长时间运行的
我需要在事务成功或回滚后调用一些方法。我使用as 应用程序使用一些外部web服务,当内部事务回滚时,这些服务需要“清理”。有没有一种方法可以在不使用声明性事务管理的情况下实现这一点。
我们有一个Spring事务回滚问题,其中回滚似乎不起作用 在用注释的服务层方法中,我调用三个不同的类来插入3条记录 中间插入从第四个表执行get以填充描述字段,但此get失败。我希望第一次插入会回滚,但它似乎没有发生 几点: 获取方法抛出运行时异常 我们使用和中定义的。Bean是在中创建的,它被导入到 在层 中没有 注释 我们已经使用了
这很好,但并不总是在代码中抛出运行时异常。因此,我挖掘并发现如下所示的rollbackFor; 现在,我必须更改所有代码,以使用RollBackfor更改@Transactional。但是还有其他方法可以将所有@transaction advice属性更改为rollbackFor=exception.class吗?