Summary on 20080710: union and projection search by QBC

Hibernate QBC 查询定制
本文介绍如何使用Hibernate Query By Criteria (QBC) 进行投影搜索及结果定制,包括通过Projections类进行字段选择和使用自定义Bean实例返回查询结果。

1. union and projection search by QBC: in hibernate, QBC can do projection search by use the Projections class. The implementation can be as followed:

Class Student{

    Integer stuId;

    String name;

    Integer age;

    .....

    setter/getter

    .....

}



Projection search:



Criteria criteria = session.createCriteria(Student.class);

criteria.setProjection(Projections.projectionList()

                                     .add(Projections.id())

                                     .add(Projection.property("name")));
Class Card{

    Integer card_id

    Student student;

}



Criteria criteria = Session.createCriteria(Card.class)

                              .createAlias("student" “stu");

criteria.setProjection(projections.projectionList()

                                    .add(projections.id())

                                    .add(projections.property("stu.name"))

                                );

Please note that for the union search, there is one restriction that: the filter used for union should be one class, not one elementary type. and also, it should be mapped in the hibernate mapping file.

2. customize the return result by QBC: especially for the projection search, one problem is that by default, the return type is one 'object', and use object[0], object[1] to get the value; however, more times, it would be easy if the return type is one customized bean instance. for example, for the projection search, return one bean which has attribute of id and name, it will be quite easy to handle the search result. Fortunately that hibernate support this case. check the code below:

Class CustomizedBean{

    Integer id;

    String name;

    ......

    getter/setter

    ......

}

Criteria criteria = .......

criteria.setProjection(projection.projectionList()

                                     .add(projections.id().as("id"))

                                     .add(projections.property("stu.name").as("name"))

                                );

criteria.setResultTransformer(new AliasToBeanResultTransformer(CustomizedBean.class));

 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值