Чтение набора в PostLoad на JPA / Hibernate - PullRequest
3 голосов
/ 07 августа 2011

У меня есть простая сущность с отношением OneToMany:

@Column(name = "TITLE")
private String _title;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "PROJECT_ID")
private Set<Device> _devices;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "PROJECT_ID")
private Set<Firm> _firms;

И я хочу делать вещи с моим набором в методе PostLoad

@PostLoad
private void copyToProperty() {
    title.set(_title);
    if (_devices != null && !_devices.isEmpty())
       //DO Stuff HERE
}

Но, когда я пытаюсь получить доступк _устройствам я получаю это исключение:

Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.LazyInitializationException: failed to lazily initialize a collection, no session or session was closed
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1215)
at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:635)
at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:589)
at com.dooapp.jpa.Main.main(Main.java:57)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

Кто-нибудь знает, почему я получаю исключение LazyInitializationException, если я нахожусь на FetchType.EAGER?

И как это работает??

Благодарю

1 Ответ

5 голосов
/ 07 августа 2011

К сожалению, Hibernate просто не позволяет вам этого делать.В методе @PostLoad вам не разрешается касаться какой-либо ассоциации в сущности.Это давняя серьезная ошибка.

Исходную ошибку смотрите: https://issues.jboss.org/browse/JBAS-5474. После того, как ошибка была закрыта (пока еще не устранена), тут же вновь открылась новая: https://hibernate.onjira.com/browse/HHH-6043

Если этоошибка вас (я думаю, это так), пожалуйста, проголосуйте за это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...