Java 从EJB引发的LazyInitializationException异常

Java 从EJB引发的LazyInitializationException异常,java,jakarta-ee,Java,Jakarta Ee,我创建了一个公开为web服务(REST)的EJB。然而,当我尝试它时,我得到了下面的异常。我追溯到我在问题实体上的JPA注释。当我取消注释@ManyToOne映射(具有fetch属性的映射)时,它似乎抛出了这个异常。我有意将实体与其他实体之间的所有关系设置为FetchType.LAZY。我想保持这种状态 我使用的是容器管理的事务和所有正常的EJB。为什么会发生这种情况?修复方法是什么 编辑: 我有一个用@Stateless注释的存储库类,然后我在另一个EJB中使用这个类,它从存储库中检索问题列表

我创建了一个公开为web服务(REST)的EJB。然而,当我尝试它时,我得到了下面的异常。我追溯到我在问题实体上的JPA注释。当我取消注释
@ManyToOne
映射(具有fetch属性的映射)时,它似乎抛出了这个异常。我有意将实体与其他实体之间的所有关系设置为
FetchType.LAZY
。我想保持这种状态

我使用的是容器管理的事务和所有正常的EJB。为什么会发生这种情况?修复方法是什么

编辑: 我有一个用
@Stateless
注释的存储库类,然后我在另一个EJB中使用这个类,它从存储库中检索问题列表。最后,我有了一个资源,它也被注释为
@Stateless
。是因为某种持久性上下文还是什么

PS我省略了实体中的所有其他内容,当我按照所述修复注释时,代码会起作用。

@Entity
public class Question extends AbstractModel {

    private int id;
    private Participant participant;
    private List<Answer> answers;
    private List<QuestionCategory> categories;
    private List<QuestionFeedback> feedback;

    public Question() {
        answers = new ArrayList<Answer>();
        categories = new ArrayList<QuestionCategory>();
        feedback = new ArrayList<QuestionFeedback>();
    }

    @ManyToOne
    //@ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "ParticipantId")
    public Participant getParticipant() {
        return participant;
    }

    //@OneToMany(cascade = CascadeType.ALL)
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name = "QuestionId", nullable = false)
    public List<Answer> getAnswers() {
        return answers;
    }

    @ManyToMany(fetch = FetchType.LAZY)
    @JoinTable(name = "QuestionQuestionCategory",
            joinColumns = @JoinColumn(name = "QuestionId", nullable = false),
            inverseJoinColumns = @JoinColumn(name = "QuestionCategoryId", nullable = false)
    )
    public List<QuestionCategory> getCategories() {
        return categories;
    }

    //@OneToMany(cascade = CascadeType.ALL)
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JoinColumn(name = "QuestionId", nullable = false)
    public List<QuestionFeedback> getFeedback() {
        return feedback;
    }
}
@实体
公共类问题扩展抽象模型{
私有int-id;
私人参与者;
私人名单答案;
私人名单类别;
私人名单反馈;
公众问题({
answers=newarraylist();
categories=newarraylist();
反馈=新的ArrayList();
}
@许多酮
//@manytone(fetch=FetchType.LAZY)
@JoinColumn(name=“ParticipantId”)
公共参与者getParticipant(){
返回参与者;
}
//@OneToMany(级联=级联类型.ALL)
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@JoinColumn(name=“QuestionId”,null=false)
公共列表getAnswers(){
返回答案;
}
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name=“QuestionQuestionCategory”,
joinColumns=@JoinColumn(name=“QuestionId”,nullable=false),
inverseJoinColumns=@JoinColumn(name=“QuestionCategoryId”,null=false)
)
公共列表getCategories(){
退货类别;
}
//@OneToMany(级联=级联类型.ALL)
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@JoinColumn(name=“QuestionId”,null=false)
公共列表getFeedback(){
反馈;
}
}
引发此异常:

[#| 2012-11-11T00:10:59.182+0100 | WARNING | glassfish3.1.2 | javax.enterprise.system.container.web.com.sun.enterprise.web | u ThreadID=71;| u ThreadName=Thread-8;| StandardWrapperValve[javax.ws.rs.core.Application]: PWC1406:Servlet javax.ws.rs.core.Application的Servlet.service() 引发异常org.hibernate.LazyInitializationException:无法 初始化代理-此时没有会话 org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:165) 在 org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:272) 在 org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:185) at sun.reflect.GeneratedMethodAccessor76.invoke(未知源)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 位于java.lang.reflect.Method.invoke(Method.java:601) com.sun.xml.bind.v2.runtime.reflect.Accessor$GetterSetterReflection.get(Accessor.java:354) 在 com.sun.xml.bind.v2.runtime.reflect.Accessor.getUnadapted(Accessor.java:147) 在 com.sun.xml.bind.v2.runtime.reflect.TransducedAccessor$CompositeTransducedAccessorImpl.hasValue(TransducedAccessor.java:251) 在 com.sun.xml.bind.v2.runtime.property.SingleElementLeapProperty.serializeBody(SingleElementLeapProperty.java:105) 在 com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:358) 在 com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:350) 在 com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:696) 在 com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serializeBody(SingleElementNodeProperty.java:158) 在 com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:358) 在 com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:696) 在 com.sun.xml.bind.v2.runtime.property.ArrayElementNodeProperty.serializeItem(ArrayElementNodeProperty.java:69) 在 com.sun.xml.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty.java:172) 在 com.sun.xml.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:159) 在 com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:358) 在 com.sun.xml.bind.v2.runtime.XMLSerializer.ChildAssociatent(XMLSerializer.java:593) 在 com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:340) 在 com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:494) 在 com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:323) 在 com.sun.xml.bind.v2.runtime.MarshallerImpl.marshall(MarshallerImpl.java:178) 在 com.sun.jersey.json.impl.BaseJSONMarshaller.marshallToJSON(BaseJSONMarshaller.java:103) 在 com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider.writeTo(JSONRootElementProvider.java:143) 在 com.sun.jersey.core.provider.jaxb.AbstractRootElementProvider.writeTo(AbstractRootElementProvider.java:157) 在 com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:306) 在 com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1437) 在 com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349) 在 com.sun.jersey.server.impl.application.WebApplicationImpl.HandlerRequest(WebApplicationImpl。
@ManyToOne
//@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ParticipantId")
public Participant getParticipant() {
    return participant;
}
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "QuestionQuestionCategory",
        joinColumns = @JoinColumn(name = "QuestionId", nullable = false),
        inverseJoinColumns = @JoinColumn(name = "QuestionCategoryId", nullable = false)
)
public List<QuestionCategory> getCategories() {
    Hibernate.initialize(categories)
    return categories;
}
public Question find(Object id) {
    Question question = getEntityManager().find(Question.class, id);
    Hibernate.initialize(question.getCategories());
    Hibernate.initialize(question.getAnswers());
    Hibernate.initialize(question.getFeedback());

    return question ;
}
public void userHasClickedAQuestion(Object id) {
    selectedQuestion = questionFacade.find(id);
}