【问题标题】:Get Hibernate Initialized object in JSP在 JSP 中获取 Hibernate Initialized 对象
【发布时间】:2015-07-14 11:43:21
【问题描述】:

我有一个对象列表 (Jpassatempos),我正在尝试初始化它们

       Session session = this.sessionFactory.getCurrentSession();

       List<Jpassatempos> list = (List<Jpassatempos>) session.createQuery("select jpassatempos  from Jcodigos c where c.jconcorrentes.id=? group by c.jpassatempos.id order by c.jpassatempos.dataFim desc").setParameter(0, id).list();

       for(int i =0; i< list.size(); i++){
           Hibernate.initialize(list.get(i).getJpatrocinadoresPassatemposes());
       }


        return list;

它们确实被填充了,但是当我尝试在我的 jsp 页面上调用它们时:

  ${passatempo.jpatrocinadoresPassatemposes.toArray()[0].id}

它给了我以下错误:

HTTP Status 500 - javax.servlet.ServletException: 
javax.servlet.jsp.JspException: javax.servlet.jsp.JspException: 
javax.servlet.jsp.JspException: org.hibernate.LazyInitializationException: 
failed to lazily initialize a collection of role: 
...Jpassatempos.jpatrocinadoresPassatemposes, could not initialize proxy - no Session

感谢任何帮助。

【问题讨论】:

  • 也发布实体结构,我怀疑你可能需要初始化getJpatrocinadoresPassatemposes() 也一一进行迭代。
  • @kunal 重命名 org.Hibernate.Session 对象尝试一次,因为 session 是 jsp 中 HttpSession 的预定义对象。

标签: java spring hibernate jsp spring-mvc


【解决方案1】:

此错误表示:在您的 JSP 中,您无法获得 Hibernate 会话。我的意思是你的对象没有附加会话。

查看休眠生命周期了解更多详情:https://stackoverflow.com/a/8113456/1326692

你应该像这样将你的列表从服务器端传递给 JSP,

request.setAttribute("myListName", list);

然后使用 JSTL 访问它。

更多详情:https://stackoverflow.com/a/2148672/1326692

【讨论】:

    【解决方案2】:

    感谢大家的时间和耐心,解决方案很简单。 问题是我遇到了 2 个不同的错误,其中一个是我没有正确初始化 JpatrocinadoresPassatempos,然后我需要像这样初始化它的孩子:

    会话会话 = this.sessionFactory.getCurrentSession(); List JpassatemposList = session.createQuery("select Jpassatempos from Jpassatempos p where p.dataFim > current_date and p.flgPago=true and p.id not in (select c.jpassatempos from Jcodigos c where c.jconcorrentes.id=? group by c .jpassatempos) 顺序由 p.dataFim desc").setParameter(0, id).list();

        for(int i =0; i< JpassatemposList.size(); i++){
            Hibernate.initialize(JpassatemposList.get(i).getJpatrocinadoresPassatemposes());
    
            for(JpatrocinadoresPassatempos pp : JpassatemposList.get(i).getJpatrocinadoresPassatemposes()){
               Hibernate.initialize(pp.getJpatrocinadores());
            }
    
        }
        return JpassatemposList;
    

    再次感谢大家:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-22
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      • 2013-08-28
      • 2012-07-14
      • 2017-05-02
      相关资源
      最近更新 更多