`
charyle
  • 浏览: 166111 次
  • 性别: Icon_minigender_1
  • 来自: 天蝎座
社区版块
存档分类
最新评论

Hibernate的HQL中in参数设置

阅读更多

   平时经常用Hibernate,由于习惯表间不建立关联,所以HQL查询时候经常要用in语句。

    我最常用的情况有2种:

   1、in后是个子查询,如 FROM A WHERE A.ID IN (SELECT B.AID FROM B WHERE ...),这样是没问题的,如果A.ID 和B.AID是相同的数据类型。

   2、in的参数如果已知了,可以直接拼接在后面 如FROM A WHERE A.ID IN (1,2,3,4...)。

   3、上面的情况下,通常(1,2,3,4...)都是作为参数传递过来的,可能是数组或者List。

    假设List<Integer> a;a里面已经有数据了,则HQL查询条件可以为:        

String hql="FROM A WHERE A.ID IN (:alist)";
Query query = getSession().createQuery(hql);
query.setParameterList("alist", a);

   另外,query.setParameterList中的第二个参数,还可以是数组类型,如int[] a,不要被方法名称迷惑。我也是最近刚学会的这种in参数设置。

11
3
分享到:
评论
4 楼 charyle 2011-11-11  
luyao123127 写道

StringBuffer("from Document doc where doc.id in(?)");
Query query=session.createQuery
如上的代码,为什么我传递参数 "3,4,5",却只能查询出第一个3的对象,后面两个相应的对象为什么查询不出来,数据库都有记录存在的!
求解释!

要么将参数字符串直接拼进去,要么采用文章中参数传递形式。。
这种?的情况下直接替换了,就变为in("3,4,5")...
而采用文章中形式和in正确方法是in("3","4","5")
3 楼 luyao123127 2011-11-11  
public List<Document> getDocumentsByIds(final String ids){
		List<Document> documents=getHibernateTemplate().executeFind(new HibernateCallback(){
			public Object doInHibernate(Session session) throws HibernateException,SQLException {
				StringBuffer sql=new StringBuffer("from Document doc where doc.id in(?)");
				Query query=session.createQuery(sql.toString());
				query.setString(0,ids);
				return query.list();
			}
		});
		if(documents!=null&&documents.size()>0){
			return documents;
		}
		return null;
	}


如上的代码,为什么我传递参数 "3,4,5",却只能查询出第一个3的对象,后面两个相应的对象为什么查询不出来,数据库都有记录存在的!
求解释!
2 楼 shuijingping 2011-10-26  
不错,学习了下,挺好的
1 楼 234390216 2011-04-28  
学习了,以前还真的被那个名称给迷惑了!呵呵!

相关推荐

    Hibernate框架]Hql语句in中带参数的写法

    Hibernate框架Hql语句in中带参数的写法 Hibernate框架中,在使用HQL语句时,需要传递参数,而在HQL语句中使用in关键字时,需要特别注意参数的传递方式。在本文中,我们将讨论如何在HQL语句中使用in关键字带参数的...

    Hibernate-HQL.rar_HQL_hibernate hql

    2. 子查询:可以在WHERE或HAVING子句中嵌套HQL查询,如“SELECT u FROM User u WHERE u.id IN (SELECT f.userId FROM Friend f WHERE f.friendId=100)”。 3. 动态HQL:通过Criteria API或Query接口,可以构建动态...

    Hibernate-HQL-查询-Query资料

    在Hibernate中,HQL(Hibernate Query Language)是专为ORM设计的一种面向对象的查询语言,它允许开发者以类和对象的方式进行数据查询,而不是直接使用SQL。本资料主要涵盖了Hibernate HQL查询的基本概念、语法以及...

    Hibernate 查询经典练习题

    在本文中,我们将探讨基于Hibernate的查询实践,包括HQL(Hibernate Query Language)和Criteria API的使用。我们将通过两个经典的练习题来深入理解这两个查询方式,并讨论它们在处理不同查询需求时的特点。 ### ...

    NHibernate hql 可用函数,函数大全

    - **In 与 Exists 的区别**: `In` 主要用于比较单个值是否存在于列表中, 而 `Exists` 更侧重于判断某个子查询是否有结果返回, 性能上 `Exists` 通常更优。 ### 三、HQL 更新与删除操作 **1. 更新操作** - **语法*...

    Hibernate 经常用的一些HQL语句

    ### HQL(Hibernate Query Language)在Hibernate中的应用 HQL是Hibernate框架提供的查询语言,它允许开发者以面向对象的方式进行数据库查询,使代码更具可读性和维护性。下面将详细介绍HQL在实际开发中常用的几种...

    Hibernate In Action(Java.Persistence.with.Hibernate)源码

    《Hibernate In Action(Java.Persistence.with.Hibernate)》是一本深入探讨Hibernate框架的书籍,源码则是作者为了配合书中理论部分而提供的实践示例。Hibernate是一个流行的开源对象关系映射(ORM)框架,它允许...

    hibernate的大部分的工具类

    总结来说,这个压缩包中的工具类覆盖了Hibernate的多个方面,包括初始化设置、数据验证、分页处理以及HQL查询的优化。它们是后端开发中的重要组成部分,特别是对于涉及持久层操作的项目,这些工具类将极大地增强代码...

    hql语句的学习,很有用的东西

    本篇文章将深入探讨HQL语句的学习及其在Hibernate中的应用。 首先,HQL语句的核心特性是它的面向对象性。与SQL不同,HQL直接操作对象和实体,这使得代码更易于理解和维护。例如,如果你想从数据库中获取所有User...

    hql语句大全

    HQL(Hibernate Query Language)是Hibernate框架中用于查询对象关系映射(ORM)的数据的语言,类似于SQL,但它是面向对象的。以下是对标题和描述中所提到的HQL语句的详细说明: 1. 实体查询: HQL的基本查询形式...

    hql基础语句

    HQL(Hibernate Query Language)是Hibernate框架中用于操作对象关系映射(ORM)的查询语言,它是SQL的面向对象版本,使得开发者可以更方便地在Java应用中进行数据库查询。本教程将深入讲解HQL的基础语句,包括ID...

    Spring--HQL-chaxun.zip_HQL

    在Spring框架中,Hibernate Query Language(HQL)是一种强大的工具,用于执行对象关系映射(ORM)查询。HQL是面向对象的查询语言,与SQL类似但更专注于处理Java对象而不是数据库表。在这个名为“Spring--HQL-chaxun...

    hibernate查询详细代码讲解

    上述代码中,`createQuery`方法接收HQL字符串,并返回一个Query对象,该对象可以进一步配置(如设置参数、排序等),最后调用`list`方法获取结果集。 HQL还支持聚合函数,如COUNT、SUM、AVG、MAX和MIN,可用于计算...

    优化Hibernate性能的几点建议

    在Hibernate配置文件中可以通过以下方式设置Fetch Size: ```xml &lt;prop key="hibernate.dialect"&gt;org.hibernate.dialect.Oracle9Dialect &lt;prop key="hibernate.show_sql"&gt;false &lt;!-- 其他配置 --&gt; ...

    Hibernate(HQL).zip_Java编程_Java_

    标题"Hibernate(HQL).zip_Java编程_Java_"中,我们可以看出主要讨论的内容是关于Hibernate框架中的HQL(Hibernate Query Language)部分,这是一项用于操作Java数据库的强大工具。Java编程和Java标签进一步确认了...

    Hibernate进行数据查询

    本篇将详细阐述如何使用Hibernate进行数据查询,包括基本数据查询、HQL(Hibernate Query Language)以及查询条件的设定。 1. **基本查询** Hibernate提供了一个简单易用的API来进行数据查询。主要通过`Session`...

    Hibernate开发指南.pdf

    2. **设置开发环境**: 确保你的开发环境中已经安装了Java JDK,并且版本满足Hibernate的要求。此外,还需要准备数据库环境,如MySQL或Oracle等,并确保能够正确连接。 3. **下载Hibernate库**: 从Hibernate官方网站...

    在Hibernate应用中处理批量更新和批量删除

    // 设置参数值 cstmt.executeUpdate(); tx.commit(); ``` **优势**:对于支持批处理的数据库如Oracle,此方法能充分利用其批处理能力,进一步提升性能。 ### 四、批量删除操作 批量删除操作与批量更新类似,...

Global site tag (gtag.js) - Google Analytics