Hibernate @manytomy上的LazyInitializationException,尽管FetchType=EAGER

Hibernate @manytomy上的LazyInitializationException,尽管FetchType=EAGER,hibernate,jpa,many-to-many,jsf-2.2,Hibernate,Jpa,Many To Many,Jsf 2.2,由于我仍然面临着这个问题,在梳理了这个流行例外的所有解决方案之后,我的情况如下。在我的案例(汽车池)中,我有以下两种车型: @Entity public abstract class Car { @GeneratedValue @Id private Long id; private String name; @ManyToMany (cascade = {CascadeType.ALL}, fetch = FetchType.EAGER) @Join

由于我仍然面临着这个问题,在梳理了这个流行例外的所有解决方案之后,我的情况如下。在我的案例(汽车池)中,我有以下两种车型:

@Entity
public abstract class Car {
    @GeneratedValue @Id
    private Long id;
    private String name;
    @ManyToMany (cascade = {CascadeType.ALL},  fetch = FetchType.EAGER) 
    @JoinTable  (name = "Car_Person", joinColumns=@JoinColumn(name = "CarId", referencedColumnName = "id"), 
             inverseJoinColumns=@JoinColumn(name = "personId", referencedColumnName = "id"))
    private List<Person> carUsers; 
    //rest omitted
}

任何帮助都将不胜感激。

根据您的配置,您应该在
web.xml
中作为
过滤器尝试此操作,以便延迟加载属性

Hibernate(请注意spring和Hibernate版本使用正确版本的
org.springframework.orm.Hibernate{***您的***版本***}
):


冬眠过滤器
org.springframework.orm.hibernate4.support.OpenSessionInViewFilter
sessionFactoryBeanName
会话工厂
冬眠过滤器
/*
Jpa:


oemInViewFilter
org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
EntityManager工厂名称
实体管理工厂
oemInViewFilter
/*
好的,我找到了答案。感谢伟大的巴卢斯

这个问题不仅与多对多关系有关,这就是为什么急切抓取没有帮助,甚至反模式也没有帮助(hibernate.enable\u lazy\u load\u no\u trans,视图中的opensession)

问题的真正原因是SelectManyMenu。你必须告诉它,它应该处理什么样的结果集。在我的例子中,我必须像这样添加collectionType

<p:selectManyMenu value="#{carController.currentCar.carUsers}" converter="personConverter">     
    <f:selectItems value="#{personBean.persons}" var="person" itemLabel="#{person.name}" itemValue="#{person}"/>        
</p:selectManyMenu>
<p:selectManyMenu value="#carController.currentCar.motUsers}" collectionType="java.util.LinkedHashSet">


首先尝试将
motUsers
更改为
carUsers
我看到一个错误的映射,指向Person类。很抱歉,我调整了类名以使代码更简洁。请注意使用“急切”对许多关系。阅读原因:可能最好保持懒惰并使用Hibernate.initialize或使用EntityGraphHanks Simon初始化集合,我知道不太推荐使用EAGER。你能告诉我如何以及在哪里放置
Hibernate.initialize
?谢谢Moodi,但是我得到了一个
ClassNotFoundException:org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
我在使用Wildfly,不使用spring。是的,我使用的是Maven。如果我使用JPA,你的确切意思是什么?Wildfly会自动使用Hibernate作为JPA提供者。感谢您将url添加到“其他地方的答案”中。您可以编辑您的答案并在那里添加相关内容
11:02:27,769 SEVERE [javax.enterprise.resource.webcontainer.jsf.context] (default task-42) org.hibernate.LazyInitializationException: failed to lazily initialize a collection, could not initialize proxy - no Session
    at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:587)
    at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:204)
    at org.hibernate.collection.internal.AbstractPersistentCollection.readSize(AbstractPersistentCollection.java:148)
    at org.hibernate.collection.internal.PersistentBag.isEmpty(PersistentBag.java:266)
    at javax.faces.component.UIInput.isEmpty(UIInput.java:1272)
    at javax.faces.component.UIInput.validateValue(UIInput.java:1159)
    at javax.faces.component.UISelectMany.validateValue(UISelectMany.java:579)
    at javax.faces.component.UIInput.validate(UIInput.java:982)
    at javax.faces.component.UIInput.executeValidate(UIInput.java:1248)
    at javax.faces.component.UIInput.processValidators(UIInput.java:712)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at org.primefaces.component.dialog.Dialog.processValidators(Dialog.java:423)
    at javax.faces.component.UIForm.processValidators(UIForm.java:253)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1195)
    at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
    at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
    at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
    at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
    at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
    at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
    at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
    at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
    at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
    at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
    at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:292)
    at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:81)
    at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:138)
    at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:135)
    at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
    at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
    at io.undertow.servlet.api.LegacyThreadSetupActionWrapper$1.call(LegacyThreadSetupActionWrapper.java:44)
    at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:272)
    at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
    at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:104)
    at io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)
    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:805)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
<filter>
      <filter-name>hibernateFilter</filter-name>
      <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
      <init-param>
         <param-name>sessionFactoryBeanName</param-name>
         <param-value>sessionFactory</param-value>
      </init-param>     
   </filter>
   <filter-mapping>
     <filter-name>hibernateFilter</filter-name>
    <url-pattern>/*</url-pattern>
<filter>
    <filter-name>oemInViewFilter</filter-name>
    <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
    <init-param>
        <param-name>entityManagerFactoryBeanName</param-name>
        <param-value>entityManagerFactory</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>oemInViewFilter</filter-name>
    <url-pattern>/*</url-pattern>
<p:selectManyMenu value="#carController.currentCar.motUsers}" collectionType="java.util.LinkedHashSet">