小编edw*_*win的帖子

为什么交易不会在我的junit测试用例中开始?

我有一个带有junit4测试套件的Spring 3.1 MVC + Hibernate 3.6项目.我的问题是我的测试用例中没有开始交易,甚至认为我添加了@Transactional.

我的测试用例调用了一个控制器和一个dao.在控制器中,无论如何都要启动一个事务,所以它不会抱怨.在dao中,我添加了一个@Transactional(propagation = Propagation.MANDATORY)以确保它将进行测试的事务.目前它引发了一个IllegalTransactionStateException,我想这意味着没有当前的事务.

我试图创建programmaticaly一个事务,它确实工作,这意味着获取dao服务的AOP代理不是问题的原因.但是我想用@Transactional注释创建一个事务.

这是我的道:

// ...imports...

@Repository("taskDao")
@Transactional(propagation = Propagation.MANDATORY)
public class TaskHome implements TaskDao {

    private static final Log log = LogFactory.getLog(TaskHome.class);

    private SessionFactory sessionFactory;

    @Autowired
    public TaskHome(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }

    public Task findById(int id) {
        log.debug("getting Task instance with id: " + id);
        try {
            Task instance = (Task) this.sessionFactory.getCurrentSession().get(
                    Task.class, id); // exception raised here!
            if (instance == null) …
Run Code Online (Sandbox Code Playgroud)

junit spring hibernate spring-annotations spring-transactions

1
推荐指数
1
解决办法
1万
查看次数