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

Sik*_*kor 3 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);
}
Run Code Online (Sandbox Code Playgroud)

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

方法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);
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用。错误:在此处输入图片说明
有一个映射异常,但这是因为无法获取惰性实体。
我可能只是愚蠢,但如果有我不明白的地方,请解释。
提前致谢。

Rub*_*ben 5

@Transactionalin private方法中的in无效,因为您是从类的另一个方法中调用它的,而绕过处理事务的Proxy。