无法延迟获取 - @Transactional方法中没有会话

时间:2015-10-08 18:01:47

标签: java spring transactions

基本上我正在尝试获得与另一个实体具有LAZY关系的实体。以下是我尝试的两件事。第一个工作,第二个不工作,我不明白为什么。我想要的只是从数据库中获取实体。我把它放在其他方法中的原因是我不希望第一个是@Transactional,因为它可能需要一些时间来执行。请注意,我没有在第一种方法中保存甚至再次访问数据库,我只需要从db读取一次。

方法1(按预期工作):

@Override
@Transactional
public void sendEmailToUser(Long exhibitorId) {
    EmailExhibitorTO exhibitorTO = findExhibitorById(exhibitorId);     
}

private EmailExhibitorTO findExhibitorById(Long id){
    return converter.convert(exhibitorRepository.findById(id), EmailExhibitorTO.class);
}

这里的一切都很好,我也得到了实体和懒惰的初始化实体。

方法2(不起作用):

@Override
public void sendEmailToUser(Long exhibitorId) {
    EmailExhibitorTO exhibitorTO = findExhibitorById(exhibitorId);     
}

@Transactional
private EmailExhibitorTO findExhibitorById(Long id){
    return converter.convert(exhibitorRepository.findById(id), EmailExhibitorTO.class);

然而,这不起作用。错误:enter image description here
有一个映射异常,但那是因为懒惰的实体无法获取。
我可能只是愚蠢但是如果我不明白的东西,请解释。
提前致谢。

2 个答案:

答案 0 :(得分:5)

私有方法中的@Transactional无效,因为您是从类的另一个方法调用它,绕过处理事务的代理。

答案 1 :(得分:0)

您无法在私有方法上传播事务,您可以在此处查看:  Does Spring @Transactional attribute work on a private method?