【发布时间】:2015-07-22 09:29:51
【问题描述】:
我正在使用 Jersey、Spring 和 Hibernate 开发一个 REST API。我有这个端点:
@Path("incidences")
public class IncidencesResource {
@InjectParam
IncidencesService incidencesService;
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Incidence> getIncidences(
@QueryParam("lastupdate") String lastUpdate) {
return incidencesService.getIncidences();
}
和服务:
@Service
public class IncidencesService {
@Autowired
IncidencesDAO incidencesDAO;
@Transactional
public List<Incidence> getIncidences() {
List<Incidence> incidencias = incidencesDao.getIncidences();
return incidences;
}
}
但我收到 org.hibernate.LazyInitializationException 错误:
延迟初始化角色集合失败: com.api.blabla.Incidence.questions,没有 会话或会话已关闭
questions 是Incidence 的@OneToMany 属性。
如果我将@Transactional 注释放在端点方法中,而不是在服务中,它可以正常工作。但我知道@Transactional 必须放在服务级别。
谢谢。
【问题讨论】:
-
异常在哪里抛出,在哪个类?
Incidence何时转换为 JSON? -
如果在服务方法中返回
incidences之前调用Hibernate.initialize(incidences.getQuestions())怎么办?另一种解决方案是急切地而不是懒惰地获取questions,可以使用@OneToMany的fetch属性进行配置。 -
请写入spring设置xml文件。