Hibernate 5.3传播。REQUIRES_NEW不起作用

时间:2018-07-12 08:50:48

标签: java hibernate jpa hibernate-5.x

我有一个用@Transactional(propagation = Propagation.REQUIRES_NEW)注释的方法。从带有@Transactional(propagation = Propagation.NOT_SUPPORTED)的方法中间接调用该方法,该方法应中断其所调用方法的每个现有事务。中断事务工作正常。我的问题是,Propagation.REQUIRES_NEW并没有创建我需要的新交易。

但是,我能够执行手动交易管理,在这种情况下,整个结构可以按预期工作。但是我真的很想避免手动交易管理。

所以我的问题是,如何根据需要在Propagation.REQUIRES_NEW中使用Propagation.NOT_SUPPORTED创建新交易?


根据要求输入代码:

测试类的初始调用:

service.loadData(false);

服务是如下界面:

@Transactional
public interface DataService {

    @Transactional(propagation = Propagation.NOT_SUPPORTED)
    void loadData(boolean singleDayOnly);

    void someOtherMethodWithDefaultTransaction();
}

服务实现调用控制器:

@Override
public void loadData(boolean singleDayOnly) {
    controller.loadData(singleDayOnly);
}

Controller也是一个接口,但没有任何@Transactional

Controller实现:

@Override
public void loadData(boolean singleDayOnly) {
    List<Data> data = getAllForRequest();
    for (Data entry : data) {
        someMethodWithTransaction(entry);
    }
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
private List<Data> getAllForRequest() {
    //dao.getHibSession().beginTransaction();
    List<Data> l = securityDailyDataDao.getAllForRequest();
    //dao.getHibSession().getTransaction().commit();
    return l;
}

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void someMethodWithTransaction(SecurityDailyData entry) {
    //securityDailyDataDao.getHibSession().beginTransaction();
    DTO dto = ..getDTO();
    entry.setCode(dto.getID());

    securityDailyDataDao.getHibSession().merge(entry);
    //securityDailyDataDao.getHibSession().getTransaction().commit();
}

这就是我想要的样子。但是没有创建任何交易,这就是我必须手动创建交易的原因

0 个答案:

没有答案