免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 41135 | 回复: 1
打印 上一主题 下一主题

用criteria进行关联查询--hibernate 的ResultTransformer [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-27 15:29 |只看该作者 |倒序浏览

引用
两个实体 Parent(P) 和 Child(C)之间是1:N的关系,现要求符合指定条件的P及所包 含的C
采用hibernate中的Criteria来实现此功能的代码如下:
Java代码
[/url]
  • Criteria criteria = this.getCriteria(Parent.class);   
  • //连接关联子对象child,且指定了连接方式为左外连接    
  • criteria.createAlias("children", "c", CriteriaSpecification.LEFT_JOIN));   
  • //下面三行代码是用于获取总的记录数    
  • criteria.setProjection(Projections.rowCount());   
  • int size = (Integer) criteria.uniqueResult();   
  • criteria.setProjection(null);   
  •    
  • List results = criteria.list();  Criteria criteria = this.getCriteria(Parent.class);
    //连接关联子对象child,且指定了连接方式为左外连接
    criteria.createAlias("children", "c", CriteriaSpecification.LEFT_JOIN));
    //下面三行代码是用于获取总的记录数
    criteria.setProjection(Projections.rowCount());
    int size = (Integer) criteria.uniqueResult();
    criteria.setProjection(null);
    List results = criteria.list();
    上面的results返回的是一个对象数组的list,数组的长度为2,依次是一个Child对象和一个Parent对象,这种返回结果的方式是所需要的;但是,倘若将中间三条获取总记录数的代码去掉,则返回是Parent对象的list,且其相关的Child子对象也没有加载进来。造成这种差别的便是 ResultTransformer
    API中对 ResultTransformer 的说明如下:
    引用
    Implementors define a strategy for transforming criteria query results into the actual application-visible query result list.
    从上可知,criteria会使用此接口的某一实现来将查询结果转化为返回的list中实际存储的结果。criteria中的方法 setResultTrans 可用于设置所使用的转化策略。其可设置的值如下:

    Criteria中默认使用的 ResultTransformer 实现策略是 ROOT_ENTITY;但是当调用了方法 setProjection后,会隐式地将策略设置为 PROJECTION。所以,才会出现上例中的两种不同结果。如果希望返回的结果是数组形式的,则可以多加上如下这条语句:
    Java代码
    [url=http://lionheart.javaeye.com/blog/170148#]

  • criteria.setProjection(null);  


    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/57965/showart_1946316.html
  • 论坛徽章:
    0
    2 [报告]
    发表于 2012-08-26 17:29 |只看该作者
    它返回值取的是数组中的最后一个对象,也即根实体对象
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP