LazyInitializationException В рамках метода @Transactional

Я сталкиваюсь с ошибкой org.hibernate.LazyInitializationException , когда пытаюсь получить доступ к отложенной загрузке исключения при исключении следующего:

@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());
}

Мои объекты выглядят следующим образом:

@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;

     ...
}

У меня создалось впечатление, что использование аннотации @Transactional в моем методе displayAddresses () будет поддерживать сеанс в рабочем состоянии до тех пор, пока метод не будет завершен, что позволит мне получить доступ к коллекции адресов с отложенной загрузкой.

Я что-то упускаю?

РЕДАКТИРОВАТЬ

В соответствии с советом Томаша: В моем методе displayAddresses () состояние TransactionSynchronizationManager.isActualTransactionActive (), изменилось оказалось ложным .

Это сужает проблему, но почему моя транзакция не активна в этот момент?

6
задан Tyler Murry 16 February 2012 в 20:11
поделиться