Closed liukefu2050 closed 2 years ago
这个和 Dubbo 没啥关系,是你的 com.xiushang.framework.entity.vo.PageTableVO
不支持 @transactional
你好,感谢回复,能具体点吗?如何解决这个问题?service我改造成dubbo之前,功能正常的啊,变成DubboService,才不行的。
我感觉不会是延迟加载问题,LazyLoadUtil.fullLoad(page); 方法应该已经加载了
@DubboService(interfaceClass=CustomService.class,filter = "userFilter",retries = 0)
public class CustomServiceImpl extends BaseServiceImpl<CustomEntity> implements CustomService {
@Transactional(readOnly = true)
public PageTableVO findPageList(CustomSearchVo searchPageVo) {
...
Page<CustomEntity> page = findPageList(ex, searchPageVo.createPageRequest(new Sort.Order(dir, "lastContactDate")));
//请注意下面这行代码
LazyLoadUtil.fullLoad(page);
PageTableVO vo = new PageTableVO(page, searchPageVo);
return vo;
}
}
public class LazyLoadUtil {
public synchronized static void fullLoad(Object object) {
if(object == null)
return;
JSON.toJSONString(object, new LazyLoadFilter());
}
}
我感觉不会是延迟加载问题,LazyLoadUtil.fullLoad(page); 方法应该已经加载了
@DubboService(interfaceClass=CustomService.class,filter = "userFilter",retries = 0) public class CustomServiceImpl extends BaseServiceImpl<CustomEntity> implements CustomService { @Transactional(readOnly = true) public PageTableVO findPageList(CustomSearchVo searchPageVo) { ... Page<CustomEntity> page = findPageList(ex, searchPageVo.createPageRequest(new Sort.Order(dir, "lastContactDate"))); //请注意下面这行代码 LazyLoadUtil.fullLoad(page); PageTableVO vo = new PageTableVO(page, searchPageVo); return vo; } } public class LazyLoadUtil { public synchronized static void fullLoad(Object object) { if(object == null) return; JSON.toJSONString(object, new LazyLoadFilter()); } }
看报错是在返回的时候了,可以 debug 看下
测试仓库 已重现报错,见: https://github.com/liukefu2050/DubboTransactional.git
Environment
Steps to reproduce this issue
代码使用了JPA,CustomEntity 中有延迟加载的属性,因此需要session
Expected Behavior
能正常返回,并延迟加载 CustomEntity中所有属性
Actual Behavior
could not initialize proxy - no Session
If there is an exception, please attach the exception trace:
请问最新版本dubbo 不是已经解决了DubboService 和 @Transactional 的问题吗,我是缺少了什么配置吗