`
zxylcy
  • 浏览: 5333 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hibernate下的子查询

阅读更多
昨天在用hibernate做项目的时候,发现一个bug。就是发现在用Restrictions.in()函数的时候,当in里面的表达式超过1000的时候就会报错。因为在oracle数据库里面,默认括号里面的表达式是不能超过1000.如果是用纯sql语句的话问题可能还是比较好解决的,因为我可以拼接sql。但是我在想hibernate作为一个这么成熟的持久层框架不可能没有考虑到这个问题的啊。后面经过查找资料和老板的帮助,终于找到了解决的方法。那就是在hibernate里面。查询都是先建立一个DetachedCriteria或者一个Criteria,前者是离线的,后者是在线的。我选择的是前者的离线的方式。我的查询是基于一个客户表和一个资源表的。在资源表里面有一个外键customer_id是客户表的主键。我开始的想法是先根据customer_name查询出来一个customer的list对象,然后用Restrictions.in()去查询,开始没有什么问题,但是当我模糊查询的时候等到的list的size大于1000的时候就开始出现错误了。后面查找才知道在oracle里面in厘米的表达式不能超过1000.后面我就开始想办法解决,但是网上的基本都是一些sql拼接的方式,我想要的是一种hibernate里面的方式。后面在老板的提醒下想到了hibernate下面的子查询的方式。所以我就直接用了criteria.add(Restrictions.like("customer.cnName", customerName));。但是后来发现还是不可以。总是报错说Customer类没有customer.cnName这个属性。后面通过查找资料才知道要想进行此类的子查询就要在创建一个DetachedCriteria。就是在原来的DetachedCriteria的基础上创建一个。criteria.createCriteria( "customer" ).add( Restrictions.like( "cnName" , customerName , MatchMode.ANYWHERE ) );如上所示。这种方式可以无限循环下去。那么就代表可以进行多层外键的子查询。
分享到:
评论

相关推荐

    hibernate子查询

    在使用Hibernate进行数据查询时,有时会遇到需要使用子查询的情况。然而,正如你所描述的,Hibernate的HQL(Hibernate Query Language)并不直接支持在`FROM`子句后跟一个子查询,这与标准的SQL语法有所差异。在HQL...

    Hibernate 函数 ,子查询 和原生SQL查询

    在Hibernate中,子查询可用于以下场景: 1. **IN/NOT IN操作符**:`from Entity e where e.id in (select id from AnotherEntity)`,这样的查询会找出存在于另一个实体的结果。 2. **比较操作符**:`from Entity e...

    Hibernate的高级查询

    HQL支持各种复杂的查询,如连接查询、分组查询、子查询等。例如,我们可以用以下HQL语句查询所有未删除的用户: ```java String hql = "from User u where u.deleted = false"; Query<User> query = session....

    hibernate实现递归查询

    本文将深入探讨如何使用Hibernate实现递归查询,以解决在数据层次结构中涉及父节点与子节点关系时的问题。递归查询通常用于处理树形结构的数据,例如组织结构、菜单系统或者文件目录等。 首先,我们需要了解递归的...

    通用的hibernate查询

    除了基础的查询,Hibernate还支持连接查询、子查询、聚合函数等高级功能。例如,如果你需要根据用户的年龄进行分组并计算每个年龄段的用户数量,可以这样写: ```java String hql = "select age, count(*) from ...

    hibernate里面的 两种查询

    - **优点**:HQL具有强大的功能,可以处理复杂的查询,包括关联查询、子查询和集合操作。同时,HQL支持动态查询,可以根据参数动态构造查询语句,适合于复杂或动态的查询需求。 - **基本结构**:HQL查询通常以`from...

    hibernate 查询?Hibernate的HQL查询

    它支持连接(inner/outer/full joins)、投影、聚合、分组、排序、子查询以及SQL函数调用。 2. 简单HQL示例: ```java Query query = session.createQuery("from User user where user.name like 'J%'"); List...

    Hibernate中的查询:HQL、Criteria、原生SQl

    HQL支持复杂的查询,如分组、排序、联接、子查询等,且能自动处理对象关系映射,提高了代码的可读性和可维护性。 二、Criteria API Criteria API是Hibernate提供的另一种查询方式,它提供了一种面向对象的查询接口...

    Hibernate QBC高级查询.rar

    5. **子查询**:QBC允许我们在查询中嵌套其他查询,这在处理复杂的业务逻辑时非常有用。 6. **投影(Projection)**:不同于传统的返回完整实体,Projection允许我们只获取查询结果的一部分,比如特定字段的值或者...

    Oracle中(column1,column2..)in(集合/子查询)的hibernate实现

    这篇博客文章“Oracle中(column1,column2..)in(集合/子查询)的hibernate实现”可能详细解释了如何在Hibernate中构建这种复杂查询。 首先,`Restrictions`是Hibernate Criteria API中的一个类,它提供了一系列的方法...

    hibernate通用查询

    HQL可以方便地进行对象间的关联查询,支持聚合函数和子查询。 3. Query API:这是基于HQL的查询接口,提供了执行HQL查询的方法。 三、通用查询实现 在实际项目中,我们通常会创建一个CommonDaoImpl类,封装常见的...

    hibernate 中HQL语句查询学习笔记

    子查询是在另一个查询内部的查询,可以用于多种复杂的场景。 ##### 嵌套子查询的概念 子查询通常用于比较、筛选等操作。 ##### 带有IN谓词的子查询 用于检查值是否存在于另一个查询结果中: ```hql SELECT s ...

    hibernate02:session对象、hql查询、在线查询也叫对象查询、离线查询

    HQL支持各种操作,如选择、投影、连接、分组、排序等,还可以进行复杂的条件查询和子查询。例如,以下是一个简单的HQL查询示例,用于获取所有年龄大于30岁的用户: ```java String hql = "FROM User WHERE age > 30...

    Hibernate_query聚合函数查询.

    在实际应用中,你还可以结合Hibernate的 Criteria 查询、Criteria API 或者 JPA 的 Query API 来实现更复杂的聚合查询,如带条件的聚合、子查询等。 总之,Hibernate提供的聚合函数使得在Java应用程序中进行数据...

    hibernate3.0电子文档

    Hibernate 3.0是其发展中的一个重要里程碑,引入了许多新特性,如支持JPA(Java Persistence API),改进了性能,提供了更丰富的查询语言HQL(Hibernate Query Language)。 二、核心概念 1. 实体(Entity):在...

    \Hibernate_query条件查询

    // 子查询结果映射到id属性 ``` 9. **投影与聚合函数** 投影用于获取特定列,而聚合函数(如COUNT, SUM, AVG等)用于统计。例如: ```java // HQL query = session.createQuery("select count(u) from User u...

    struts +hibernate 电子留言系统

    3. **留言展示**:Struts根据请求参数查询数据库(使用Hibernate),并渲染到JSP页面显示。 4. **回复功能**:类似于留言发布,只是多了一个关联原留言的字段。 5. **权限控制**:Spring AOP可以实现权限拦截,比如...

    Hibernate-HQL-查询-Query资料

    - HQL支持在SELECT、FROM、WHERE子句中使用子查询。 - 子查询可以返回单个值,也可以返回对象列表。 8. **参数化查询** - 使用问号(?)作为占位符,防止SQL注入攻击。 - 可以使用Query接口的setParameter()...

    用Hibernate实现分页查询.docx

    分页查询是一种在数据量较大的情况下,为了提高用户体验和系统性能而采取的一种技术手段。它将查询结果分成若干页显示,用户可以通过翻页操作查看不同的数据集。 在进行分页查询时,通常需要指定两个重要的参数:`...

Global site tag (gtag.js) - Google Analytics