hibernate hql 查询指定字段并获取结果集 且出去这个字段中的重复数据

publicList<FhDicKyZm>Search_ForZmInfo(Stringstr){StringBufferhql=newStringBuffer("fro... public List<FhDicKyZm> Search_ForZmInfo(String str) {

StringBuffer hql = new StringBuffer("from FhDicKyZm ");
hql.append("where zmdm like '%"+str+"%' ");
hql.append("or zm like '%"+str+"%' ");
hql.append("or pym like '%"+str+"%' ");
hql.append("or dbm like '%"+str+"%' ");
Query query = getSession().createQuery(hql.toString());
List<FhDicKyZm> list = query.list();
return list;
}
展开
 我来答
山水阿锐
2015-06-11 · TA获得超过34.3万个赞
知道顶级答主
回答量:23.7万
采纳率:91%
帮助的人:3.1亿
展开全部
hql="select s.id,s.name,t.id,t.name from User s,Useraddress t where t.id=s.id"
这条sql里面的User和Useraddress是两个实体类,现在组合查询分别取出来两个实体类里面的两个字段,然后我想再建立一个实体类Result,里面定义这四个结果集里面的字段,能不能执行完这条hql,正好把这个结果集对应到实体类Result里面呢,Result这个实体类,没写映射文件Result.hbm.xml.
希望能帮下忙

2种做法
创建一个class temp
有属性sid,name,tid,sname,tname
创建一个构造函数
public temp(sid,name,tid,sname,tname)
{

}
1.hql中
List<temp>

select new temp(s.id,s.name,t.id,t.name) from User s,Useraddress t where t.id=s.id

2.List
记录的每一行是object[] 遍历
object[0] ==s.id
object[1] ==s.name
object[2] ==t.id
object[3] ==t.name
感谢glamey兄弟的文章,正好解决了当前遇到的问题。原文链接如下:http://glamey.iteye.com/blog/721019
假设我们现在有一个DTO,其属性包括两张表的属性,我们现在需要将sql语句查询得到的内容转为一个DTO对象,其解决方法如下:

String sql = "select u.userName as userName ,p.title as title ,p.addTime as addTime from user as u,post as p where u.id=p.userId"
Query q = factory.getCurrentSession().createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(PostVO.class));

上面select中as后面的内容必须和PostVO中属性名一致,这样就可以返回一个针对PostVO的一个集合。
其实大家可以看下hibernate这一部分的源码就会发现,主要是使用了AliasToBeanResultTransformer这个类,通过sql的查询,会返回数组,然后hibernate根据数据表的映射,自动帮我们来set对应的字段属性,所以标红的部分务必要跟VO中的属性值一直,要不然会报错的。
如果需要的话,大家也可以重写这个类。例如VOResultTransformer。然后在dao中更改成:
setResultTransformer(new VOResultTransformer(PostVO.class));

另外,除了以上glamey的方法外,还有一种方法:

Query q = session.createQuery("select new com.hibernate.MsgInfo(m.id, m.cont, m.topic.title, m.topic.category.name) from Msg m");
List<MsgInfo> list=q.list();
其中,MsgInfo是DTO。值得注意的是,第二种方法中DTO必须提供带参数的构造方法,并且HQL语句中属性的位置要与构造方法中的位置一一对应。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式