Hibernate / Jpa OneToMany没有正确检索数据

时间:2014-06-02 11:53:52

标签: java hibernate jpa hibernate-onetomany

我有一个名为User的实体类,它包含数据库的这个OneToMany列:

  @Setter
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
    @JoinTable(
        name = "USER_CARS",
        joinColumns = @JoinColumn(name="USER_ID", referencedColumnName = "id"),
        inverseJoinColumns = @JoinColumn(name="CAR_ID", referencedColumnName = "id")
    )
    private List<Car> cars;

当我将用户插入数据库时​​,一切正常,他的汽车也被添加到user_cars表中。检索汽车时,我得到了这个例外:

Method threw 'org.hibernate.LazyInitializationException' exception.

我已经搜索了其他答案,但没有找到解决方法。这就是我试图检索用户的方式。

public T findById(Long id) {
    em = emf.createEntityManager();
    em.getTransaction().begin();

    T et = (T) em.find(entityClass, id);

    em.getTransaction().commit();
    em.close();

    return et;
}

问题是什么?我该如何解决?我无法理解背景中发生了什么。

1 个答案:

答案 0 :(得分:1)

根据异常消息,您似乎正在检索List汽车的内容,但EntityManager会话已经关闭。您可以使用

而不是集合的默认延迟初始化
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user", fetch = FetchType.EAGER)