繁体   English   中英

延迟加载Spring数据

[英]lazy loading with Spring data

我正在使用易于使用的Spring data但我无法控制它,因为我在那里遇到了错误

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: entity.Qualite.fonctions, could not initialize proxy - no Session

我知道FetchType.EAGER会工作,但我想让它保持懒惰。 那么如何在spring data控制会话呢?

@RequestMapping(value="/loadfonction") 
public @ResponseBody
Set<Fonction> loadfonction(Map<String, Object> model, HttpServletRequest request) { 

    Set<Fonction> fonctions = qualiteRepo.findOne(Integer.valueOf(request.getParameter("idquality"))).getFonctions();

    System.out.println(fonctions.size());

    return fonctions;


}

我甚至尝试@Transactional注释,但它不起作用:

@Transactional
@RequestMapping(value="/loadfonction") 

尝试使用spring mvc框架打开视图时,这是一个常见问题。 控制方法在视图可以显示之前关闭会话。 (尝试将视图保留在业务逻辑之外)要解决此问题,可以使用OpenSessionInViewFilter类。

这是一篇关于如何实现它的文章:

http://blog.cloudmate.pl/2010/09/hibernates-open-session-in-view-in.html

在您的存储库中,您无法使用查询方法来初始化集合。 相反,你应该定义一个类似的查询来获取它的集合。 根据您的域名更改您的查询,我无法弄清楚它应该如何找到您。

@Query("SELECT q FROM Qualite q JOIN FETCH q.role WHERE q.fonctionId = (:fonctionId)")
public Qualite findById(@Param("fonctionId") String fonctionId);

你不能。 避免此问题的唯一方法是在要检索Fonction对象时执行查询。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM