用过mybatis的小伙伴可能都知道,我们可以查询两个表的部分字段合并为一个实体。然而用了Hibernate这么久了,居然还不知道也有此神器。
说明
一般来说,Hibernate中我们常用的有以下几个功能
1.查询全部字段的情况下,如"from 实体类",list中封装的对象为实体类本身,各属性都将得到填充。
2.只查询一个字段,默认情况下,list中封装的是Object对象。
3.查询两个或两个以上的字段,默认情况下,list中封装的是Object[],长度与所查询的字段数一致。
4.查询部分字段,与数据库保持一致,在hql中使用select new 包名.类名(属性1,属性2……) from 实体类,同时在实体类中添加带参的构造方法,参数的个数和顺序与(属性1,属性2……) 保持一致,这样我们得到的list中存放的依然是实体类的对象,所查询到的属性得到了填充,使用起来更为方便。
配置
如果,我们想查询两个表的部分字段并以实体类的方式展示,如下:
sql="select u.id,u.name,c.contact_name from user u,contract c where u.id = c.id"
这条sql里面的user 和contract 是两个实体类,现在组合查询分别取出来两个实体类里面的部分字段,然后建立一个实体类Result。
实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserVo {
private Integer id;
private String name;
private String contactName;
}
查询
String sql="select u.id,u.name,c.contact_name from user u,contract c where u.id = c.id"
Query query = session.createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(UserVo.class));
return (List<UserVo>)query.list();