Я сталкиваюсь с ошибкой 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 (),
изменилось оказалось ложным
.
Это сужает проблему, но почему моя транзакция не активна в этот момент?