解决hibernate延迟加载的问题:
在Dao层的方法中添加一个是否获取延迟加载List的参数(如传入一个枚举参数);
在Dao获取数据后,判断延迟加载参数,如果获取延迟加载参数为true,则创建一个新的列表,构造器的参数为获取延迟加载的集合,然后将新的集合set到对象属性中,这样在dao层外就可以访问延迟加载的数据了。
简单的代码如下:
Student.java
private String name;
private List<Course> courseList;
Dao.java
...
public Student queryStudent(Integer studentId, FetchCourseEnum fetchCourse) {
Student student = .......;
if(fetchCourse.YES.equalse(fetchCourse) {
List<Course> courseList = new ArrayList<Course>(student.getCourseList());
student.setCourseList(courseList);
}
return student;
}
...
延迟加载的数据不能再dao层外面获取的原因:在dao层外,session就关闭了,所以在dao层外访问延迟加载的数据会抛异常。
在Dao层的方法中添加一个是否获取延迟加载List的参数(如传入一个枚举参数);
在Dao获取数据后,判断延迟加载参数,如果获取延迟加载参数为true,则创建一个新的列表,构造器的参数为获取延迟加载的集合,然后将新的集合set到对象属性中,这样在dao层外就可以访问延迟加载的数据了。
简单的代码如下:
Student.java
private String name;
private List<Course> courseList;
Dao.java
...
public Student queryStudent(Integer studentId, FetchCourseEnum fetchCourse) {
Student student = .......;
if(fetchCourse.YES.equalse(fetchCourse) {
List<Course> courseList = new ArrayList<Course>(student.getCourseList());
student.setCourseList(courseList);
}
return student;
}
...
延迟加载的数据不能再dao层外面获取的原因:在dao层外,session就关闭了,所以在dao层外访问延迟加载的数据会抛异常。