hibernate用session.createCriteria(类.class)查数据时无法生成对应的类

北漂小混混 北漂小混混 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

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[]

但是,如果一个类没有和其它类相关联,即只对一个单独的类进行相关操作,都能正确生成结果,不知道是什么原因,希望大家帮忙看看
...全文
评论 3
收藏 已收藏
分享
返回顶部
北漂小混混
Web 开发 81,108 成员 341,721 内容