首页编程resulttransformer hibernate用HQL查询集合属性

resulttransformer hibernate用HQL查询集合属性

编程之家2023-11-03111次浏览

朋友们,resulttransformer和hibernate用HQL查询集合属性是当今热门话题,但是它们的内涵和影响力可能会让人感到困惑。在本篇文章中,我将为你们揭示它们的本质和重要性,希望能够为你们带来新的认识。

resulttransformer hibernate用HQL查询集合属性

hibernate用HQL查询集合属性

hql="selects.id,s.name,t.id,t.namefromUsers,Useraddresstwheret.id=s.id"这条sql里面的User和Useraddress是两个实体类,现在组合查询分别取出来两个实体类里面的两个字段,然后我想再建立一个实体类Result,里面定义这四个结果集里面的字段,能不能执行完这条hql,正好把这个结果集对应到实体类Result里面呢,Result这个实体类,没写映射文件Result.hbm.xml.希望能帮下忙2种做法创建一个classtemp有属性sid,name,tid,sname,tname创建一个构造函数publictemp(sid,name,tid,sname,tname){}1.hql中Listselectnewtemp(s.id,s.name,t.id,t.name)fromUsers,Useraddresstwheret.id=s.id2.List记录的每一行是object[]遍历object[0]==s.idobject[1]==s.nameobject[2]==t.idobject[3]==t.name感谢glamey兄弟的文章,正好解决了当前遇到的问题。原文链接如下:/blog/721019假设我们现在有一个DTO,其属性包括两张表的属性,我们现在需要将sql语句查询得到的内容转为一个DTO对象,其解决方法如下:Stringsql="selectu.userNameasuserName,p.titleastitle,p.addTimeasaddTimefromuserasu,postaspwhereu.id=p.userId"Queryq=factory.getCurrentSession().createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(PostVO.class));上面select中as后面的内容必须和PostVO中属性名一致,这样就可以返回一个针对PostVO的一个集合。其实大家可以看下hibernate这一部分的源码就会发现,主要是使用了AliasToBeanResultTransformer这个类,通过sql的查询,会返回数组,然后hibernate根据数据表的映射,自动帮我们来set对应的字段属性,所以标红的部分务必要跟VO中的属性值一直,要不然会报错的。如果需要的话,大家也可以重写这个类。例如VOResultTransformer。然后在dao中更改成:setResultTransformer(newVOResultTransformer(PostVO.class));另外,除了以上glamey的方法外,还有一种方法:Queryq=session.createQuery("selectnewcom.hibernate.MsgInfo(m.id,m.cont,m.topic.title,m.topic.category.name)fromMsgm");Listlist=q.list();其中,MsgInfo是DTO。值得注意的是,第二种方法中DTO必须提供带参数的构造方法,并且HQL语句中属性的位置要与构造方法中的位置一一对应。

原生sql查询怎样返回page对象

最近由于需求变更,客户需要在原来的查询基础上加上一个判断条件,但是这个判断条件所在的实体跟原来的查询实体没有直接关联。为了不影响原来的查询结果,改为用原生SQL,使用left join来关联查询。为了不改变对查询结果的处理逻辑,将查询结果封装成原来的对象进行操作。具体操作方法如下:

1.基于JPA规范的程序:

Query query= entityManager.createNativeQuery("select id, name, age from t_user");

query.unwrap(SQLQuery.class).setResultTransformer(Transformers.aliasToBean(clazz));

//其中clazz为封装对象的class

resulttransformer hibernate用HQL查询集合属性

List rows= query.getResultList();

2.基于Session的程序:

sess.createSQLQuery("SELECT NAME, BIRTHDATE FROM CATS").setResultTransformer(Transformers.aliasToBean(clazz));

这两种方法需要注意的是查询的字段的别名需要跟clazz的属性对应。

OK,本文到此结束,希望对大家有所帮助。

resulttransformer hibernate用HQL查询集合属性
滚动条事件 如何获取网页滚动条滚动事件网站流量 龙优化软件,如何快速推广网站