当前位置: 首页 > 知识库问答 >
问题:

未能延迟初始化集合…,无法初始化代理-无会话

百里业
2023-03-14

我有一个应用程序,我正在扩展它以提供REST API。在主站点中一切正常,但当我尝试访问REST API时,我在异常日志中得到以下内容:

"Error","ajp-bio-8014-exec-3","12/02/14","12:54:06","table","failed to lazily initialize a collection of role: field, could not initialize proxy - no Session The specific sequence of files included or processed is: service.cfc'' "
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: field, could not initialize proxy - no Session
    at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:566)
    at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:186)
    at org.hibernate.collection.internal.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:137)
    at org.hibernate.collection.internal.PersistentBag.size(PersistentBag.java:242)
    at coldfusion.runtime.xml.ListIndexAccessor.getSize(ListIndexAccessor.java:44)
    at coldfusion.runtime.xml.ArrayHandler.serialize(ArrayHandler.java:69)
    at coldfusion.runtime.xml.CFComponentHandler.serialize(CFComponentHandler.java:106)
    at coldfusion.runtime.XMLizerUtils.serializeXML(XMLizerUtils.java:83)
    at coldfusion.rest.provider.CFObjectProvider.writeTo(CFObjectProvider.java:378)
    at com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:306)
    at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1479)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1391)
    at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1381)
    at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
    at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538)
    at coldfusion.rest.servlet.CFRestServletContainer.service(CFRestServletContainer.java:141)
    at coldfusion.rest.servlet.CFRestServletContainer.service(CFRestServletContainer.java:86)
    at coldfusion.rest.servlet.CFRestServlet.serviceUsingAlreadyInitializedContainers(CFRestServlet.java:556)
    at coldfusion.rest.servlet.CFRestServlet.invoke(CFRestServlet.java:434)
    at coldfusion.rest.servlet.RestFilter.invoke(RestFilter.java:58)
    at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:94)
    at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28)
    at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38)
    at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22)
    at coldfusion.rest.servlet.CFRestServlet.invoke(CFRestServlet.java:409)
    at coldfusion.rest.servlet.CFRestServlet.service(CFRestServlet.java:400)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42)
    at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:422)
    at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:198)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

禁用延迟加载将解决此问题,但会导致不可接受的性能(加载时间从 200 毫秒到 22 秒)。我不知道如何处理这个问题。

我刚开始在ColdFusion中Rest,在我看来,CFC正在以一种不寻常的方式被处理。它们似乎没有被初始化(init方法似乎没有运行),现在看来ORM也没有得到同样的处理。我错过了什么吗?

以下是产生此错误的代码摘录:

component rest="true" restpath="item" 
{
    import model.beans.*;

    remote item function getitem( numeric id restargsource="Path" ) restpath="{id}" httpmethod="GET"
    {
        var item = entityLoad("item",{ id = id },true);

        return item;
    }

}

和豆子:

component persistent="true" table="item" output="false" extends="timestampedBean" batchsize="10" cacheuse="read-only"
{
    /* properties */

    property name="id" column="id" type="numeric" ormtype="int" fieldtype="id" generator="identity"; 
    property name="title" column="title" type="string" ormtype="string"; 
    property name="description" column="description" type="string" ormtype="string"; 
    property name="status" column="status" type="numeric" ormtype="byte" default="0" ; 
    property name="user" fieldtype="many-to-one" cfc="user" fkcolumn="userid" inversejoincolum="userid" lazy="true" cacheuse="read-only";
    property name="field" type="array" fieldtype="many-to-many" cfc="field" fkcolumn="id" linktable="items_fields" inversejoincolumn="fieldid" lazy="extra" batchsize="10" cacheuse="read-only";
}

我还注意到,在标准输出日志中,Hibernate正在记录查询,但随后记录了“无会话”错误:

Hibernate: 
    select
        item0_.id as id0_0_,
        item0_.dtcreated as dtcreated0_0_,
        item0_.dtmodified as dtmodified0_0_,
        item0_.title as title0_0_,
        item0_.description as descript6_0_0_,
        item0_.status as status0_0_,
        item0_.userid as userid0_0_ 
    from
        item item0_ 
    where
        item0_.id=?
Dec 2, 2014 15:23:00 PM Error [ajp-bio-8014-exec-3] - failed to lazily initialize a collection of role: field, could not initialize proxy - no Session The specific sequence of files included or processed is: service.cfc''

我可能还应该补充一点,这个“item”表是多对多关系的一部分,所以“collection of role: field”引用的是外部表。

共有2个答案

罗源
2023-03-14

将列表设置为空

示例:

迭代对象并将每个实体列表设置为空

entity.setList(null);

程振濂
2023-03-14

org.hibernate.LazyInitializationException是一个流行的Hibernate问题。根本原因是您没有打开Hibernate会话,因为没有可用的事务。有几种方法可以克服这个问题。请阅读以下链接:

http://www.javacodegeeks.com/2012/07/four-solutions-to-lazyinitializationexc_05.html http://javarevisited.blogspot.ru/2014/04/orghibernatelazyinitializationException-Could-not-initialize-proxy-no-session-hibernate-java.html

或者您可以使用

<代码>

4.1.6之后是hibernate版本。有关使用Hibernate.enable_Lazy_load_no_trans解决Hibernate懒惰初始化问题的更多信息,请参阅

 类似资料:
  • 我正在制作一个网站,我试图在其中订购配料。我选择配料并输入其数量,然后单击添加。我重复了几次。然后我进入下一页,在其中我选择了一个供应商。然后我按“订单”。 预计将Nabavka插入数据库并打开一个页面,说明订单成功,但我收到一个异常,告诉我不能懒惰地初始化它。 来自NabavkaController。java: Nabavka.java: 纳米尔尼卡。java: 纳巴夫卡科帕。java: 纳巴夫

  • 我不明白为什么会发生这种情况。根据代码路径,当引发此异常时,我应该在同一线程中并且会话应存在。 有人能告诉我我错过了什么吗? 我有设置 在hibernate.cfg.xml档案里 我在Servlet过滤器中创建了以下代码 在index.xhtml文件中,我有以下调用: 做一些事情 index.xhtml正在使用使用ui include加载menu.xhtml文件的模板。然后,菜单文件会插入menu

  • 我正在使用JPA(Hibernate 4 . 3 . 3作为持久性提供者)和Spring (3.2.2),我所有的字段都加载得很好,但是当我试图访问我的集合时,它抛出了错误- 当我调试这个时,我的实体类中定义的每个集合都有错误- 我尝试使用collection.size()和Hibernate.initialize(),但都不起作用。在Internet上搜索时,我发现扩展Persitence将解决

  • 我使用hibernate创建一个rest api。我创建了一个方法来获取表中的所有项。 这是我的anguage.java 这是我的病人。JAVA 重要提示:bean和映射是通过NetBeans从MySQL数据库反向工程的。调用时,我不需要获取与患者相关的任何数据。我的表只有两列,和<代码>患者表的外键为 在rest api中使用此方法之前,它无一例外地完美工作。但是当我在rest api中使用这个

  • 问题内容: 我使用休眠来创建一个REST API。我创建了一种获取表中所有项目的方法。 这是我的Language.java 这是我的Patient.java 重要提示:Bean和映射是通过NetBeans从MySQL数据库反向工程的。调用时,不需要获取任何与之相关的数据。我的表格只有2列,而。表的前键为 在rest api中使用此方法之前,它没有任何异常即可完美运行。但是,当我在rest api中

  • 问题内容: 我有下一个错误: 我的实体: 我有一个服务班: 我从另一种服务方法调用服务: 但是,当我试图调用这个方法我收到线异常,当我打电话时,也会发生同样的异常上。我已经检查了事务管理器,并且配置正确,并且此步骤中存在事务。另外,我已经检查了关于与此异常相关的stackoverflow的大量答案,但没什么用。 可能是什么原因造成的? 问题答案: 看来模型是一个独立的实体。 尝试合并并在合并实例上