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

北漂小混混 2012-04-01 11:48:19

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

但是,如果一个类没有和其它类相关联,即只对一个单独的类进行相关操作,都能正确生成结果,不知道是什么原因,希望大家帮忙看看
...全文
399 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
北漂小混混 2012-04-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
怎么不适用Query ,他有直接分页的属性啊,query.setFirstResult(0),从0开始,query.setMaxResult(设置要分页的显示行数),很方便的啊
[/Quote]
用query进行条件查询不方便,可能要根据很多条件来进行筛选,而且条件都是不确定的
m540920181 2012-04-01
  • 打赏
  • 举报
回复
怎么不适用Query ,他有直接分页的属性啊,query.setFirstResult(0),从0开始,query.setMaxResult(设置要分页的显示行数),很方便的啊

81,095

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧