Question

Je suis en cours d'exécution dans l'erreur de org.hibernate.LazyInitializationException lorsque je tente d'accéder à une exception chargée paresseux quand excecuting les éléments suivants:

@Transactional
public void displayAddresses()
{
     Person person = getPersonByID(1234);
     List<Address> addresses = person.getAddresses(); // Exception Thrown Here

     for(Address address : addresses)
          System.out.println(address.getFullAddress());
}

Mes entités ressemblent à ceci:

@Entity
@Table("PERSON_TBL")
public class Person
{
     ...

     @OneToMany(cascade=CascadeType.ALL, targetEntity=Address.class, mappedBy="person")
     private List<Address> addresses;

     ...
}

@Entity
@Table("ADDRESS_TBL")
public class Address
{
     ...

     @ManyToOne(targetEntity=Person.class)
     @JoinColumn(name="PERSON_ID", referencedColumnName="PERSON_ID")
     Person person;

     ...
}

J'avais l'impression qu'en utilisant l'annotation @Transactional dans ma méthode de displayAddresses(), il garderait la session en vie jusqu'à ce que la méthode a été terminée, me permettant d'accéder à la collecte d'adresses paresseux chargé.

Am quelque chose que je manque?

EDIT

Conformément à l'avis de Tomasz: Dans ma méthode de displayAddresses(), l'état de TransactionSynchronizationManager.isActualTransactionActive(), avéré être false.

Cela ne réduit sur le problème, mais pourquoi ma transaction ne pas être actif à ce stade?

Était-ce utile?

La solution 2

Avoir <tx:annotation-driven /> dans mon fichier de configuration et en utilisant une version gérée Spring-de ma classe de service (pour appeler la méthode displayAddresses ()) a fait l'affaire.

Autres conseils

Ceci est déjà répondu, mais je voulais juste pour poster une réponse alternative a fonctionné pour moi dans une affaire similaire - pour les générations futures;)

Dans mon cas, la question a été causé par le fait que l'instance qui contenait la collection lazy-chargé avait été évincé manuellement (tous dans les limites de transaction).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top