有一次遇到需要在hql语句里用到in了,上一次查了半天也没搞定,最后索性用and、and、and代替了,但这次in()集合是需要SQL查出来的id集合,没办法,再次研究。
本着抄袭要注明出处的原则,我参考的博客是:http://blessht.iteye.com/blog/1051421
先写我的报错的hql语句,我的原语句是“from Member where delFlag = 0 and memberNo in (from ArmyMember am where armyNo = :armyNo ) ”
DB2报的异常是:
com.ibm.db2.jcc.c.SqlException: DB2 SQL error: SQLCODE: -401, SQLSTATE: 42818, SQLERRMC: IN
写到这里,我发现其实我只要这样写就不会错了!囧~~~ hql:
“from Member where delFlag = 0 and memberNo in (select am.memberNo from ArmyMember am where armyNo = :armyNo ) ”
撇开我的粗心不说,我的解决方案是分两步查询:
第一步:先查出一个list集合
:
在manager层里分两步写:
public ArrayList<RescueMember> findMembers(String armyNo) {
//查询in里的集合
ArrayList<String> memberNos = new ArrayList<String>();
ArrayList<ArmyMember> memberNoList = teamMemSumDao.findMemberNos(armyNo);
//封装一个list<String>集合
for (ArmyMember armyMember : memberNoList) {
memberNos.add(armyMember.getMemberNo());
}
//查询把list作为参数传递给dao层
return teamMemSumDao.findMembers(memberNos);
}
dao层代码:
//查询in里的集合
public ArrayList<ArmyMember> findMemberNos(String armyNo) {
StringBuffer hql = new StringBuffer("from ArmyMember where armyNo = :armyNo ");
Session session = sessionFactory.getCurrentSession();
Query query = session.createQuery(hql.toString());
query.setParameter("armyNo", armyNo);
return (ArrayList<ArmyMember>) query.list();
}
第二步:把需要作为in()参数的list<String> 集合传递给dao
:
//hql语句带in的方法
public ArrayList<RescueMember> findMembers(ArrayList<String> memberNos
) {
StringBuffer hql = new StringBuffer("from RescueMember where delFlag = 0 and memberNo in (:memberNos
) ");
Session session = sessionFactory.getCurrentSession();
Query query = session.createQuery(hql.toString());
query.setParameterList("memberNos", memberNos);
return (ArrayList<RescueMember>) query.list();
}
重点:query对象的设置参数有很多方法,如果参数是集合,就调用query.setParameterList()
方法。
看下图:
对于用left join 多表查数据,如果没有别名,hibernate不会区分两个名字相同的字段,会导致查询后封装list数据出错,因此要经常取别名。
- 大小: 44.9 KB
分享到:
相关推荐
本文将深入解析HQL语句的常见用法。 1. 大小写敏感性 HQL对Java类和属性的名称是大小写敏感的,但在关键字和表名方面,除了类名和属性名之外,HQL不区分大小写。因此,`SeLeCT`、`sELEct`和`SELECT`被视为相同,但`...
- 如果HQL语句中有参数,则需要为这些参数设置值。 ```java query.setParameter("eventTitle", "测试事件"); ``` 5. **执行查询并处理结果** - 调用Query对象的`list()`方法来执行查询,并返回一个包含查询...
HQL(Hibernate Query Language)是Hibernate框架中用于对象关系映射(ORM)的查询语言,它允许开发者以面向对象的方式来编写查询,而不是传统的SQL。HQL的设计目标是与Java等面向对象的语言更加兼容,支持类、接口...
此压缩包中的`HibernateHQL.chm`文件很可能是Hibernate HQL的详细教程或参考手册,包含了HQL的语法、用法示例、最佳实践以及可能遇到的问题解决方案。它可以帮助开发者深入理解如何在实际项目中高效地使用HQL进行...
本程序“HibernateHql综合测试小程序”是针对Hibernate中的HQL(Hibernate Query Language)进行的一系列功能测试,涵盖了二十多种不同的HQL语句,旨在帮助开发者深入理解和熟练运用Hibernate的查询能力。...
Hibernate HQL是一种面向对象的查询语言,它允许开发人员以一种更加自然的方式来表达数据库查询,而无需直接编写SQL语句。HQL提供了类似于SQL的强大查询能力,但更符合面向对象编程的思维方式,这使得它在处理持久化...
例如,如果我们想要获取`Student`类的所有实例,可以使用如下HQL语句: ```java String hql = "from Student"; List<Student> students = session.createQuery(hql).list(); ``` 这里的`session.createQuery()`...
在示例中,第4行的HQL语句`update PhUser set realName=?`用于更新`PhUser`表中所有记录的`realName`字段。第5行的`setString(0, "小李想")`将`?`替换为字符串"小李想",然后执行`executeUpdate()`来执行更新操作。 ...
标题:“Hibernate 经常用的一些HQL语句” 描述:“可以让我们更方便的学习Hibernate” ### HQL(Hibernate Query Language)在Hibernate中的应用 HQL是Hibernate框架提供的查询语言,它允许开发者以面向对象的...
需要注意的是,在Hibernate中查询时,如果实体之间存在继承关系(如`Employee`类继承自`HourlyEmployee`和`SalariedEmployee`),则可以通过类似`"from Employee"`这样的HQL语句来查询基类`Employee`的所有子类实例...
### HQL语句查询知识点详解 #### 一、HQL简介 HQL(Hibernate Query Language)是Hibernate框架中...以上就是关于HQL语句查询的一些基础知识点,掌握了这些基本用法后,就可以更加灵活地使用HQL来处理各种查询需求了。
HQL(Hibernate Query Language)是Hibernate框架中用于操作对象关系映射(ORM)的查询语言,它是SQL的面向对象版本,使得开发者可以更方便地在Java应用中进行数据库查询。本教程将深入讲解HQL的基础语句,包括ID...
HQL(Hibernate Query Language)是一种面向对象的查询语言,建立在面向对象的基础上。它提供了类SQL查询的功能,但查询目标是对象,而不是记录。HQL 拥有面向对象语言的所有特性,包括多态、继承和组合。 一、投影...
当需要同时查询多个字段时,可以在HQL语句中指定这些字段,并通过索引来访问这些字段值: ```java String hql = "select u.name, u.age from com.mypack.User4 u"; Query query = session.createQuery(hql); List ...
HQL支持多种条件语句,如`WHERE`、`AND`、`OR`、`BETWEEN`、`IN`、`LIKE`等。例如: ```java from Employee e where e.name like 'John%' and e.age > 30 ``` 这将返回名字以"John"开头且年龄大于30的所有员工。 #...
【HQL语句经典教程】 Hibernate Query Language(HQL)是Hibernate框架提供的面向对象的查询语言,它在外观上类似于SQL,但具有显著的面向对象特性,如支持继承、多态和关联。本教程将深入讲解HQL的基本概念、用法...
- "HQL语句(结合实例).doc"则可能提供了具体的查询示例,帮助读者更好地理解和应用HQL。 通过学习这些文档,开发者可以掌握如何在Hibernate项目中高效地利用HQL进行数据查询,提升开发效率,同时保持代码的简洁...
对于初学者来说,掌握 HQL 的基本用法是非常重要的,这有助于更好地理解和应用 Hibernate 框架。 通过学习这些示例,我们可以更深入地理解如何使用 HQL 进行数据检索,并将其应用于实际项目中,提高开发效率和程序...
以下是一些常见的HQL语句及其用法: 1. **HQL更新**: 更新操作通常涉及到设置对象的属性并保存更改。例如,以下HQL语句用于将`PhUser`类中的某个用户的`realName`属性改为"小李想": ```java String hql = ...