could not initialize proxy - no Session的错误,一般出现在我们获取一些实体的oneToManymanyToMany属性时。这是由于JPA在查询完毕后,立即释放了session(实现了连接数据库并查询数据的功能). 而当我们查询完毕后,再想获取实体中的一些信息时,便发生了上述错误。

示例

比如:

// 班级
class Klass {
...
    @OneToMany
    private List<Student> studentList;
...
}

Klass klass = klassRepository.findOneById(1L); // 开启session,查询,关闭session
klass.getStudents(); // 此时session已关闭,发生错误。

解决方法

1) 设置不要查询后就关闭session:该方法不推荐,特别是小白。具体方法不阐述。
2) 设置lazy属性.该方法适用于大部分情景。

class Klass {
...
    @OneToMany
    @Lazy(false)
    private List<Student> studentList;
...

3) 设置fetch属性: 该方法适用于第2种解决方法不生效时.

class Klass {
...
    @OneToMany(fetch = FetchType.EAGER)
    private List<Student> studentList;
...

潘杰
3.1k 声望239 粉丝