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

6万+

被折叠的 条评论
为什么被折叠?



