Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
wie kann ich möglichst simpel eine LAZY Liste nachladen? Außer sie eager zu definieren?
Irgendwie müsste ich es eben erreichen, dass die Payments immer genau dann nachgeladen werden, wenn sie eben gebraucht werden.
Java:
@Entitiy
public class Person {
@OneToMany //(fetch=FetchType.EAGER)
private List payments;
//..
}
@Named
public class Service {
private persons;
//..
}
Google mal nach "jpa open session in view". Das ist ein häufig auftretendes Problem. Bei StackOverflow gibt es auch einige Fragen, die sich damit beschäftigen (z. B. diese inklusive weiterführender Links).
Also das einfachste scheint ja zu sein den OpenEntityManagerInViewFilter von Spring zu nutzen.
Habe also versucht das ganze mal zu implementieren. Die webapp läuft wieder wie vorher (dh das mit Spring scheint geklappt zu haben). Das LAZY Problem besteht aber weiterhin.
Muss ich denn noch was anderes machen, als die Configuration mit xml?
Vielleicht findet ja jemand noch einen Fehler?
Code:
[javax.enterprise.resource.webcontainer.jsf.context] (http--127.0.0.1-8080-1)
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role:
domain.person.payments, no session or session was closed
Mein Setup:
Java:
@Entity
class Payments;
@Entity
class Person {
@OneToMany
list payments;
}
@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
class Service {
@PersistenceContext
EntityManager em;
}
@Named
@RequestScoped
class CustomerFacade {
@Inject
Service service;
}
in der web.xml:
[XML]<filter>
<filter-name>
OpenEntityManagerInViewFilter
</filter-name>
<filter-class>
org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
</filter-class>
<init-param>
<param-name>singleSession</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>flushMode</param-name>
<param-value>AUTO</param-value>
</init-param>
</filter>
<!-- Include this if you are using Hibernate -->
<filter-mapping>
<filter-name>OpenEntityManagerInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
persistence.xml:
[XML]<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=" Java Persistence API: XML Schemas
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="primary">
<!-- If you are running in a production environment, add a managed
data source, the example data source is just for proofs of concept! -->
<jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
<properties>
<!-- Properties for Hibernate -->
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
<property name="hibernate.show_sql" value="false" />
</properties>
</persistence-unit>
</persistence>
[/XML]