java LazyInitializationException以最简单的方式使用OneToMany
我在jpa中使用Hibernate,我正在尝试做一件非常简单的事情。我知道LazyinizalizationException是什么意思,但我不明白为什么在我用最普通、最简单的方式做每件事的时候,它会出现。这是关系的“一面”:
@Entity
public class User implements Serializable{
@Id @GeneratedValue
private int idUser;
private String name;
private String surname;
private String username;
@OneToMany(mappedBy="user")
private List<Device> dev;
...getters and setters...
这是“多”的一面:
@Entity
public class Device implements Serializable {
@Id @GeneratedValue
private int idDevice;
private String brand;
private String model;
@ManyToOne
@JoinColumn(name="user_fk")
private User user;
...getters and setters...
引发异常的jUnit测试是:
@Test
public void testLazyUserSnd() {
User u = uDao.getUser(2);
List<Device> devList = u.getDev();
Device aDevice = devList.get(0); // <--- Here the exception is thrown
aDevice.getModel();
我建立了Hibernate Documentation中解释的关系。有什么提示吗?我是不是犯了一些又大又愚蠢的错误
# 1 楼答案
尽管@Xavi的答案非常合理,但您可能并不总是希望为用户加载设备。如果没有,有两种方法可以解决这个问题
就我个人而言,我会使用事务方法,因为它允许更大的灵活性,并允许JPA在需要时延迟加载。有关会话生命周期的更多有趣信息,请参见http://community.jboss.org/wiki/OpenSessionInView