hibernate中通过查询语句返回实体对象

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

在dao层经常使用查询语句找到数据库中表中记录,但实际操作时往往希望返回的是实体对象集合而不是值对象数组集合。

根据目前的学习,有以下几种方法:

1.hql语句返回结果为实体对象集合;所以能用 hql语句尽量用hql语句

2原生sql语句查询:List cats = this.getSession().createSQLQuery( " select * from cats " ).addEntity(Cat. class ).list(); 通过添加addEntity()来实现返回具体类

addJoin()方法可以被用于载入其他的实体和集合的关联.

List cats = sess.createSQLQuery(
" select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id " )
.addEntity( " cat " , Cat. class )
.addJoin( " kitten " , " cat.kittens " )
.list();

原生的SQL查询可能返回一个简单的标量值或者一个标量和实体的结合体。

Double max = (Double) sess.createSQLQuery( " select max(cat.weight) as maxWeight from cats cat " )
.addScalar( " maxWeight " , Hibernate.DOUBLE);
.uniqueResult();

除此之外,你还可以在你的hbm文件中描述结果集映射信息,在查询中使用。

List cats = sess.createSQLQuery(
" select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id " )
.setResultSetMapping( " catAndKitten " )
.list();

命名SQL查询
可以在映射文档中定义查询的名字,然后就可以象调用一个命名的HQL查询一样直接调用命名SQL查询.在这种情况下,我们不 需要调用addEntity()方法.

< sql - query name = " persons " >
< return alias = " person " class = " eg.Person " />
Select person.NAME AS {person.name},person.AGE AS {person.age},person.SEX AS {person.sex} FROM PERSON person Where person.NAME LIKE :namePattern
</ sql - query >List people = sess.getNamedQuery( " persons " ).setString( " namePattern " , namePattern)
.setMaxResults( 50 )
.list();

3还是原生sql语句,通过setResultTransformer()这个方法来实现转化

4通过此语句

 return (CJkglGroup) getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session s) throws HibernateException,
SQLException {
final String sql="select groupid,groupname,yljgdm,managerid,bz from  c_jkgl_group where groupid in (select groupid from c_jkgl_area_group where jwcode='"+Jwcode+"' ) ";
    List list=s.createSQLQuery(sql.toString()).addEntity(CJkglGroup.class).list();
    return list;
}
 });

 

Hibernate实体对象四大状态 首先声明,在Hibernate中,实体对象存在四种状态,而不是三种(相关源码如下,见org.hibernate.event.def.AbstractSaveEventListener.java)。网上流传的hibernate对象三大状态,大概是因为hibernate官方文档没有更新,然后一个接着一个的copy吧,你懂的。 阅读详情

相关推荐

Vue3 与 Bpmn-js:打造现代化 BPMN 流程设计器

随着业务流程的复杂化,流程设计器成为企业级应用中不可或缺的一部分。BPMN(Business Process Model and Notation)是一种标准的业务流程建模语言,广泛应用于业务流程管理。本文将介绍如何使用 Vue3 和 Bpmn-js 打造一个现代化的 BPMN 流程设计器。

九天的专栏 2072

Hibernate 查询返回值总结

PDM Tclass Tstudent   Get和load区别 1.get方式得到学生信息,get以后发出sql语句,得到stu对象     public void getTstudent(String sno) throwsException{        this.openConnection();        Tstudent stu=(Tstudent

llwyiyi的博客 4181

前言:为什么要学习爬虫和逆向,该如何学习?

学习爬虫和逆向技术是当今数字化时代的重要技能,尤其在数据分析、安全研究、自动化工具开发等领域有广泛应用。以下是详细的学习理由、路径和方法

数据知道的博客 1万+

Hibernate 查询返回结果集为对象数组后的取值方法

Hibernate 查询返回结果集为对象数组后的取值方法 示例:String hql = “select cat.name, cat.age from Cat cat”; List list = getHibernateTemplate().find(hql); if(list != null && list.size() > 0) { for(int i = ...

tyagq的博客 585

判断hibernate 多表连接查询返回对象数组object[]和类集合

判断hibernate 多表连接查询返回对象数组object[]和类集合 在学习hibernate 多表连接查询的时候,总会遇到过 类型转换异常,那是因为不同session.createQuery(hql).list()查询语句返回对象数组ist<object[]>或者类集合list。废话少说上代码。 返回对象数数组的hql语句如下 Session session = Hibern...

weixin_42440082的博客 1033

Hibernate本地SQL的使用

Hibernate默认的是使用Query对象完成数据库操作,也就是说这里面需要传入的是HQL语句,如果要用本地SQL(也即自定义SQL语句),那么我们一般用的是SQLQuery对象。下面介绍下该对象的一些常见操作 1、返回分页查询结果List&lt;T&gt; getSession().createSQLQuery(sql.toString())                 .setRes...

lichuangcsdn的博客 999

Hibernate查询指定字段并返回对象的结果集

hibernate查询指定的字段返回的是一个Object数组,如果查的是一个字段的话就返回Object对象,因为无法直接转换成实体类的对象,所以只能一个个去循环了,,现在有一种比较好的办法是在hql中使用select new 类名(属性1,属性2……) from 实体类,同时在实体类中添加带参的构造方法,参数的个数和顺序与(属性1,属性2……) 保持一致 下面看个示例代码: User对象 /...

龙胜LONGAIN 8574

hibernate hql查询

hibernate中,用hql语句查询实体类,采用list方法返回结果为一个List,该List中封装的对象分为以下三种情况:1.查询全部字段的情况下,如"from 实体类",list中封装的对象实体类本身,各属性都将得到填充。2.只查询一个字段,默认情况下,list中封装的是Object对象。3.查询两个或两个以上的字段,默认情况下,list中封装的是Object[],...

dingluce4773的博客 146

hibernate sql查询返回对象list

public Pagination findPaginationObjBySql(final String sql, final int pageIndex, final int pageSize, final Class beanClass) { return (Pagination) hibernateTemplate.execute(new HibernateCallbac

三月神的专栏 3002

详解hibernate实体映射文件

本文为原创文章,转载请注明出处: http://www.pm-road.com/index.php/2014/11/14/193/Hibernate是一个开放源代码的对象关系映射框架,对JDBC进行了非常轻量级的对象封装, 也就是说之前操作数据库的表现在可以直接操作对应的对象类,而数据库的表和对象之间就应该有一定的映射关系,而这种映射关系大部分是采用了xml配置文件 的方式...

weixin_33742618的博客 146

hibernate通过query查询返回实体集合相关注意事项

Output实体: import javax.persistence.*; import java.util.Date; @Entity @Table(name = "Output") public class Output { @Id @Column(name = "BuildID") private Integer buildId; @Transient

ithouse的专栏 3877

Hibernate的HQL简单查询语句

前言       不管数据库用的是什么类型,对于查询语句来说,我们总是习惯了SQL语句。它之所以能够屹立不倒,一方面已成为了习惯,一方面确实功能强大。Hibernate相对于其他ORM实现来说,数据查询是它独特的亮点。它所提供的HQL,类似于SQL语句,但是却比SQL语句灵活。它跟SQL语句有很多相似的地方,是因为这样的话更容易被接受。   HQL查询   简单属性查询      ...

Coder Yasmine 3071

Hibernate 返回结果list对象

hibernate中,用hql语句查询实体类,采用list方法返回结果为一个List,该List中封装的对象分为以下三种情况: 1.查询全部字段的情况下,如"from 实体类",list中封装的对象实体类本身,各属性都将得到填充。 2.只查询一个字段,默认情况下,list中封装的是Object对象。 3.查询两个或两个以上的字段,默认情况下,list中封装的是Object[],长度与所

q5545q的专栏 4814

Hibernate实体对象的三种状态以及困惑

Hibernate官方文档manaul中提到,hibernate实体有三种状态:Transient、Persistent、Detached。本文参考了官网手册和http://blog.csdn.net/hgd250/article/details/2775943这篇博客。 1、Transient状态     An object is transient if it has just

aty 2538

Hibernate4 中getHibernateTemplate() 使用原生sql语句查询并返回非托管实体对象

@Repository public class ABCDaoImpl extends HibernateDaoSupport implements IABCDao {     @Inject     public void setSuperSessionFactory(SessionFactory sessionFactory) {         super.setSessio

vevoly的博客 4303

Hibernate实体对象的生命周期

实体对象的生命周期在Hibernate应用中是一个很关键的概念,正确的理解实体对象的生命周期将对我们应用Hibernate做持久层设计起到很大的作用.而所谓的实体对象的生命周期就是指实体对象由产生到被GC回收的一段过程.在这过程中我们需要理解的就是实体对象生命周期中的三种状态。 1.自由状态(Transient) 所谓的Transient状态,即实体对象在内存中自由存在,与数据库中的记录无关,

HQingmu 青木河 586

Hibernate SQLQuery执行实体查询带来的多个无关联查询语句

今天在改写hibernate项目时,发现一个严重的问题,假如我想加二级缓存,那么就必须使用addentity()方法来指定具体的实体类, 但是我一加具体的实体类时,查询语句就会多出多个无关联的查询语句,这个问题搞了我一下午,现在把这个问题贴出来 BaseDaoImpl.java ...

chousanrao2903的博客 173

Hibernate使用sql语句查询,返回实体类型的方法及注意事项

以前,使用SQL查询,结果放在 RS 结果集中,还要去转换影射到Java类中。Hibernate中,可以自动帮我们注入到Hibernate 甚至是 非 Hibernate 类型当中。   Java代码   String sql = "select * from users";   SQLQuery sqluery = session.createSQLQuery(sql).addEnt

Icing9520的专栏 1853

hibernate 实体对象的生命周期

hibernate 实体对象的生命周期主要分为三个状态,Transient(瞬态),Persistent(持久态),Detached(游离态)。     1.Transient(瞬态) 表示该实体对象在内存中是自由的,也就是说和数据库没有任何关系。      //创建一个瞬态对象      User user = new User();      user.setName(userName

da6679980的专栏 603

Hibernate实体对象声明周期

Hibernate实体对象声明周期 实体对象的4中状态 1.文字表达 Transient(临时状态/瞬时状态):刚刚被new关键字创建,还没有被持久化,不在Session的缓存中。 不受session管理,在数据库中没有记录 Persistent(持久化状态):已被持久化,并加入到Session缓存中。 受session管理,在数据库中存在与之相对应的记录,处于持久化状态的对象会影响(改变)...

lkfmiaomiao的博客 190
上一篇: 说说开此博客的意图
下一篇: 一些小问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值