hibernate用session.createCriteria(类.class)查数据时无法生成对应的类
Criteria criteria= session.createCriteria(Teacher.class) ;
return criteria.list() ;
我的teacher表与course表是多对多的关联,中间表是teacher_course表。现在想利用criteria进行数据分页查询。但是查出的数据总有很多重复项,例如:我的teacher里含有courseList(对应course的list),courseList里有多少个course就会生成多少条重复的数据。
如果我想分页,又加个了查询总数的语句:
Criteria criteria= session.createCriteria(Teacher.class) ;
Object o = criteria.setProjection(Projections.rowCount()).uniqueResult() ;//统计总数
criteria.setProjection(null) ;
int totalRow = Integer.parseInt(o.toString()) ;//业务代码,不用管
searchResult.init(totalRow) ;//业务代码,不用管
return criteria.list() ;
生成的是包含多个object[]的list,即返回的list里包含的不再是teacher,而是直接生成了object[]。如果我直接的转换成teacher
Criteria criteria= session.createCriteria(Teacher.class) ;
Object o = criteria.setProjection(Projections.rowCount()).uniqueResult() ;//统计总数
criteria.setProjection(null) ;
int totalRow = Integer.parseInt(o.toString()) ;//业务代码,不用管
searchResult.init(totalRow) ;//业务代码,不用管
criteria.setResultTransformer(Criteria.ROOT_ENTITY) ;//要求生成的是根类型(teacher)
return criteria.list() ;
还是会生成多条重复内容(teacher内包含多少个course,就生成多少条相同的数据)
最后又加上了这样一句话
Criteria criteria= session.createCriteria(Teacher.class) ;
criteria.setFetchMode("courseList", FetchMode.SELECT) ;//让course延迟加载
Object o = criteria.setProjection(Projections.rowCount()).uniqueResult() ;//统计总数
criteria.setProjection(null) ;
int totalRow = Integer.parseInt(o.toString()) ;//业务代码,不用管
searchResult.init(totalRow) ;//业务代码,不用管
criteria.setResultTransformer(Criteria.ROOT_ENTITY) ;//要求生成的是根类型(teacher)
return criteria.list() ;
就能生成正确的内容了。
但是,如果我想对course进行条件筛选,比如只选择course.id=1的teacher,就又生成objcect[]
但是,如果一个类没有和其它类相关联,即只对一个单独的类进行相关操作,都能正确生成结果,不知道是什么原因,希望大家帮忙看看
...全文


Web 开发
