在JPA/Hibernate上阅读PostLoad中的Set

Chr*_*phe 3 hibernate jpa

我有一个简单的实体与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;
Run Code Online (Sandbox Code Playgroud)

而且我想在PostLoad方法中使用我的设置

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

但是,当我尝试访问_devices时,我得到了这个异常:

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)
Run Code Online (Sandbox Code Playgroud)

有没有人知道为什么我得到一个LazyInitializationException,只要我在FetchType.EAGER上?

怎么能这个东西工作?

谢谢

Arj*_*jms 5

不幸的是,Hibernate不允许你这样做.在@PostLoad方法中,不允许您触摸实体中的任何关联.这是一个长期存在的主要问题.

有关原始错误,请参阅:https://issues.jboss.org/browse/JBAS-5474.关闭错误后(仍然没有解决),立即重新打开一个新的:https://hibernate.onjira.com/browse/HHH-6043

如果这个bug给你带来了错误(我猜它确实存在),请投票支持.