【问题标题】:I got this javax.el.ELException org.hibernate.LazyInitializationException: could not initialize proxy - no Session我得到了这个 javax.el.E​​LException org.hibernate.LazyInitializationException: could not initialize proxy - no Session
【发布时间】:2013-06-11 01:48:21
【问题描述】:

当我想在 XHTM 页面中打印我的形成对象的其他对象属性的属性时,我得到了一个异常,即存在 javax.el.ELException: Error reading 'intitule' on type model.Theme 的异常,这是我的代码:

<h:form id="a">
                                <p:growl id="growl" showDetail="true" sticky="false" />
                                <p:dataTable var="formationObject"
                                    value="#{formationBean.listformation}" id="AjoutTab"
                                    widgetVar="FormationTable" emptyMessage="Formation non trouvé"
 rows="15"


                                    style="width:500px;font-size:13px;margin-left: 0px">

                                    <f:facet name="header">
                                        <p:outputPanel>
                                            <h:outputText value="Recherche:" />
                                            <p:inputText id="globalFilter"
                                                onkeyup="FormationTable.filter()"
                                                style="width:80px ;float:center " />
                                        </p:outputPanel>
                                    </f:facet>

                                    <p:column headerText="Intitule " id="formationRef"
                                        filterBy="#{formationObject.planning}" filterMatchMode=""
                                        footerText=" reférence exacte" width="15px">
                                        <h:outputText value="#{formationObject.planning.intitule}" />
                                    </p:column>

                                    <p:column style="width:4%">
                                            <p:commandButton  value="Analyser"
                                                icon="ui-icon-search"
                                                action="#{formationBean.redirectModification()}"            

                                                ajax="false" title="Analyser" />
                                    </p:column>
                                </p:dataTable> 
                            </h:form>

【问题讨论】:

    标签: hibernate primefaces


    【解决方案1】:

    LazyInitializationException 是一个非常常见的错误,它实际上总是意味着您要么不完全了解休眠代理,要么无法控制应用程序中发生的情况。

    当你使用@OneToMany 注解时,hibernate 通常使用延迟加载。这意味着,在对象中,代替集合,您有一个 代理,它不包含任何元素,并在第一次请求时加载元素(例如 get()size())。

    但是,如果在Transactional 范围之外访问集合,这在 Web 应用程序中通常意味着 EL 方法,则绑定到代理的休眠会话将不再存在。

    为防止此类行为,您可以选择 2 种方式:

    1) 不要使用@OneToMany。相反,如果您想要一个集合,请提供一个 DAO 方法来加载该集合。

    2) 确保您永远不会从 DAO 方法返回带有延迟加载代理的对象。您可以遍历集合,将其设置为 null,或通过映射器(如 Dozer)传递 DTO,该映射器将调用所有 getter 并遍历所有集合,返回没有代理的对象。您也可以在休眠会话上调用evict(),但是通过迭代或设置 null 您知道对象是否已加载。

    【讨论】:

      猜你喜欢
      • 2014-08-26
      • 1970-01-01
      • 1970-01-01
      • 2016-05-29
      • 2012-03-13
      • 1970-01-01
      • 2021-11-19
      • 2017-06-18
      • 1970-01-01
      相关资源
      最近更新 更多