Tôi đã sử dụng thành công chú thích này cho một lớp người Dao. Và khôi phục hoạt động cho các thử nghiệm.
Nhưng bây giờ tôi cần khôi phục mã thực chứ không chỉ kiểm tra. Có các chú thích đặc biệt để sử dụng trong các bài kiểm tra. Nhưng chú thích nào dành cho mã không thử nghiệm? Đó là một câu hỏi lớn đối với tôi. Tôi đã dành một ngày cho điều đó rồi. Tài liệu chính thức không đáp ứng nhu cầu của tôi.
class MyClass { // this does not make rollback! And record appears in DB.
EmployeeDaoInterface employeeDao;
public MyClass() {
ApplicationContext context = new ClassPathXmlApplicationContext(
new String[] { "HibernateDaoBeans.xml" });
employeeDao = (IEmployeeDao) context.getBean("employeeDao");
}
@Transactional(rollbackFor={Exception.class})
public void doInsert( Employee newEmp ) throws Exception {
employeeDao.insertEmployee(newEmp);
throw new RuntimeException();
}
}
nhân viênDao là
@Transactional
public class EmployeeDao implements IEmployeeDao {
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public void insertEmployee(Employee emp) {
sessionFactory.getCurrentSession().save(emp);
}
}
Và đây là bài kiểm tra xem các chú thích hoạt động tốt:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "/HibernateDaoBeans.xml" })
@TransactionConfiguration(transactionManager = "txManager", defaultRollback = true)
@Transactional
public class EmployeeDaoTest {
@Autowired
EmployeeDaoInterface empDao;
@Test
public void insert_record() {
...
assertTrue(empDao.insertEmployee(newEmp));
}
HibernateDaoBeans.xml
...
<bean id="employeeDao" class="Hibernate.EmployeeDao">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven transaction-manager="txManager"/>
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
...
** CÓ, tôi đã lùi giao dịch. Tôi vừa thêm BEAN cho dịch vụ ... và sau đó chú thích @Transactional bắt đầu hoạt động :-) **
<bean id="service" class="main.MyClass">
<property name="employeeDao" ref="employeeDao" />
</bean>
Cảm ơn tất cả, Nga sẽ không quên bạn!