延迟加载中的奇怪问题
Weird issue in Lazy load
我完全被一个问题搞糊涂了Spring data + hibernate
我们有一项 Restful 服务正在迁移到 V2。
所以旧控制器看起来像
@Api(tags = {"assignments"})
@RestController
@CheckedTransactional
public class AssignmentListController {
@Inject
private AssignmentListService assignmentListService;
//REST function
public list() {....}
}
REST函数list调用AssignmentListService加载assignments,它是一个集合,懒加载一些数据。它的作品非常棒。
我所做的是将此控制器复制为名称 AssignmentListControllerV2,它看起来像
@Api(tags = {"assignments"})
@RestController
@CheckedTransactional
public class AssignmentListControllerV2 {
@Inject
private AssignmentListService assignmentListService;
@Inject
private AssignmentDtoMapper assignmentDtoMapper;
public list() {...}
}
代码相同,只是添加了 AssignmentDtoMapper bean,它是使用 MapStruct 创建的。
现在的问题是,当我调用这个新服务时,不知何故我得到了延迟加载异常。错误是
could not initialize proxy - no Session
我迫切需要一些帮助,因为我不知道发生了什么。我刚刚将代码复制到一个新的 class 中,但它失败了。
这个异常其实很明显,Hibernate 无法加载延迟获取的成员,因为当你点击它时没有持久化上下文打开。
我想在 V2 中:
@Inject
private AssignmentDtoMapper assignmentDtoMapper;
是要把一些JPA业务实体改成DTO?
如果您尝试在那里映射未加载的成员,它可能是异常的来源。
如果你想避免统一代理上的异常,你可以尝试类似
public boolean isProxyInitialized(Object obj){
if(obj instanceof HibernateProxy){
HibernateProxy proxy = (HibernateProxy) obj;
return !proxy.getHibernateLazyInitializer().isUninitialized();
}
return obj != null;
}
如果作为 bean 提取的成员应该 return 为真,否则为假。
我完全被一个问题搞糊涂了Spring data + hibernate
我们有一项 Restful 服务正在迁移到 V2。
所以旧控制器看起来像
@Api(tags = {"assignments"})
@RestController
@CheckedTransactional
public class AssignmentListController {
@Inject
private AssignmentListService assignmentListService;
//REST function
public list() {....}
}
REST函数list调用AssignmentListService加载assignments,它是一个集合,懒加载一些数据。它的作品非常棒。
我所做的是将此控制器复制为名称 AssignmentListControllerV2,它看起来像
@Api(tags = {"assignments"})
@RestController
@CheckedTransactional
public class AssignmentListControllerV2 {
@Inject
private AssignmentListService assignmentListService;
@Inject
private AssignmentDtoMapper assignmentDtoMapper;
public list() {...}
}
代码相同,只是添加了 AssignmentDtoMapper bean,它是使用 MapStruct 创建的。
现在的问题是,当我调用这个新服务时,不知何故我得到了延迟加载异常。错误是
could not initialize proxy - no Session
我迫切需要一些帮助,因为我不知道发生了什么。我刚刚将代码复制到一个新的 class 中,但它失败了。
这个异常其实很明显,Hibernate 无法加载延迟获取的成员,因为当你点击它时没有持久化上下文打开。
我想在 V2 中:
@Inject
private AssignmentDtoMapper assignmentDtoMapper;
是要把一些JPA业务实体改成DTO? 如果您尝试在那里映射未加载的成员,它可能是异常的来源。
如果你想避免统一代理上的异常,你可以尝试类似
public boolean isProxyInitialized(Object obj){
if(obj instanceof HibernateProxy){
HibernateProxy proxy = (HibernateProxy) obj;
return !proxy.getHibernateLazyInitializer().isUninitialized();
}
return obj != null;
}
如果作为 bean 提取的成员应该 return 为真,否则为假。