Hi,
I'm trying to solve my LazyLoading problem, which I worked around by fetchType EAGER in the past. But that cannot be the final solution.
I tried to construct an example, which does not make much sence the way it is, but demonstrates my problem: I have a company, and persons are @ManyToOne by composition. The first time I launch the page everything works fine. The personCount is =0 displayed.
Now I select a company, which should result in some rerendering for Person inputs etc.
But when the code tries to access the personList by a calculator, I get this exception:
Maybe someone can help me solving this?Code:Schwerwiegend [javax.enterprise.resource.webcontainer.jsf.context] (http--127.0.0.1-8080-4) javax.el.ELException: /tableCompanies.xhtml @31,76 value=" #{calculator.getPersonCount(_var)}": org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: business.domain.Company.personList, no session or session was closed
tableCompanies.xhtml:
backing facades:Code:<p:dataTable var="_var" value="#{facade.companies}"> <p:column> <h:outputText value="#{calculator.getPersonCount(_var)}" />
Code:@Named @RequestScoped class Facade() { @Inject Dao dao; List<Company> companies; @PostConstruct init() { companies = Dao.findByNamedQuery("Companies.ALL"); } } @Named @RequestScoped class Calculator { int getPersonCount(Company c) { return c.getPersonList().size(); //EX } }
Crud service:
Entity:Code:@Stateless @Transactional class Dao() { @PersistenceContext private EntityManager em; //CRUD }
also already configured the Spring OpenEntityManager in web.xml:Code:@Entity @NamedQueries( { @NamedQuery(name = Company.ALL", query = "SELECT c FROM Company c") }) class Company { @OneToMany(cascade = CascadeType.ALL) // fetch=FetchType.EAGER <-ugly, but would work List<Person> personList = new LinkedList<Person>(); }
Nevertheless it does not work. But I have not more idea why! Maybe someone knows more?Code:<filter> <filter-name>OpenEntityManagerInViewFilter</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>OpenEntityManagerInViewFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
tyvm


Reply With Quote
