`

hibernate 利用子查询实现 exists 功能

阅读更多

SQL 要实现如下功能

select *
from t_export_file file
where exists (select carrier.ID as id`
          from t_export_carrier carrier
         where carrier.carrier_out_no is not null
           and carrier.carrier_out_no <> ''
           and carrier.carrier_deal = 2
           and file.ID = carrier.file_id)
and file.delete_flag = 0
order by file.CREATE_DATE desc 
表 t_export_file 与表t_export_carrier 为一对多的关系,通过 t_export_file .ID = t_export_carrier .file_id 进行主外键关联。
现在通过HIbernate 的查询实现语句如下:
 
/*定义主查询对象并命名别名,注意别名不能与另一个对象的属性名一样,否则会报错*/
DetachedCriteria query = DetachedCriteria.forClass(ExportFile.class,"file");
/*定义子查询对象并命名别名*/
DetachedCriteria queryCar = DetachedCriteria.forClass(ExportCarrier.class,"carrier");
/*添加主查询的查询条件,根据需要添加*/
//this.addQuery(query);
/*添加子查询查询条件*/
queryCar.add(Restrictions.isNotNull("carrier.carrierOutNo"));
queryCar.add(Restrictions.ne("carrier.carrierOutNo",""));
queryCar.add(Restrictions.eq("carrierDeal", 2));
/*添加子查询与主查询的主外键关联关系,若有多个条件则适当增加*/
queryCar.add(Property.forName("file.id").eqProperty("carrier.exportFile"));
/*添加子查询的查询内容,至少有一个,否则会报错,此处可以随便添加子查询的任何属性不影响主查询的数据输出。*/
query.add(Subqueries.exists(queryCar.setProjection(Projections.property("carrier.id"))));
/*查询所有符合条件的结果并保存*/
List<ExportFile> exportFileList=exportFileService.getEntitys(query);
分享到:
评论

相关推荐

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

    同时,子查询功能使得我们可以构建复杂的查询结构。当ORM无法满足需求时,原生SQL查询则提供了一种灵活的方式,以直接操作数据库的能力来解决特定问题。理解和熟练运用这些特性,对于提升Java开发中的数据库操作效率...

    Hibernate查询语言

    HQL还支持更复杂的查询,如连接查询(JOIN)、子查询和聚合函数(COUNT、SUM、AVG等)。例如,如果我们想要获取某个部门的所有员工,可以写成: ```sql SELECT e FROM Employee e JOIN e.department d WHERE d.name...

    hibernate性能调节

    - 避免在`WHERE`子句中使用`IN`操作符和子查询,改用JOIN或 EXISTS。 - 使用投影(SELECT子句指定列)减少返回数据量,避免全表查询。 7. **缓存与事务策略**: - 根据业务场景选择适当的缓存策略,如read-write...

    HibernateDaoSupport二次封装组件,快速统计和查询,修改

    `in`用于处理多个值的范围查询,`or`用于组合多个条件,而`exists`则用于检查子查询是否存在匹配的记录。 在实际应用中,二次封装的`HibernateDaoSupport`组件还可以包含事务管理、缓存控制、性能优化等功能。通过...

    HQL连接查询和注解使用总结

    - 关键字`ALL`, `ANY`/`SOME`, `IN`, `EXISTS`等可以用于子查询。 - **HQL提供的集合操作函数**: - `size()`/`size`: 获取集合中元素的数目。 - `minIndex()`/`minIndex`: 对于建立了索引的集合,获得最小的...

    开发中遇到的问题

    - **子查询**:子查询可以用来获取内部查询的结果,并作为外部查询的一部分。例如,如果需要统计某个投票题目下各个选项的投票数量,则可以使用子查询的方式: ```sql SELECT v.questionVotingId, q.title, COUNT...

    Spring Data JPA - 开发文档.pdf

    Spring Data JPA 1.11版本新增了若干功能点,如提高了与Hibernate 5.2的兼容性,支持通过实例来查询的任意匹配模式,优化分页查询以及在查询推导中使用exists映射。 ### 项目依赖 开发Spring Data JPA项目时,需要...

    解析复杂结果集解析复杂结果集

    2. **查询重构**:避免在WHERE子句中使用子查询,改写为JOIN或 EXISTS,减少查询层次。 3. **合理使用聚合**:尽量减少不必要的全表扫描,通过WHERE过滤后再聚合,减少计算量。 4. **限制返回数据量**:使用LIMIT...

    spring-data-jpa

    Spring Data JPA 提供了参考指南,该指南内容在翻译和校对中,其中包含对新增功能的介绍,如提高与Hibernate的兼容性,支持实例查询的任意匹配模式,优化分页查询,以及在查询推导中使用exists映射等。 用户指南的...

    数据库优化

    2. **查询结构优化**:避免在WHERE子句中使用复杂的表达式或函数,尽量使用等值连接而非子查询,减少全表扫描,使用JOIN代替子查询以提高效率。 3. **查询语句写法**:尽量使用SELECT *谨慎地选择需要的列,避免...

    2018年 各大IT公司最新面试题目

    - 子查询中谨慎使用`IN`或`NOT IN`,可能考虑使用`EXISTS`或`NOT EXISTS`。 - 在`WHERE`字句中尽量具体指定列,避免使用`*`。 3. **JavaScript访问父子窗口** - 在JavaScript中,子窗口可以通过`window.opener`...

    JAVA面试题目

    - **解析:** `IN`和`EXISTS`都是SQL中常用的子查询操作,但它们在功能和性能上有一定的差异: - **IN**:返回子查询结果中包含的值。当子查询结果较小或索引支持时,性能较好。 - **EXISTS**:只关心子查询是否有...

    NHibernate hql 可用函数,函数大全

    - **Exists**: 用于判断子查询是否存在结果。 - **示例**: `FROM Topic t WHERE NOT EXISTS(SELECT m.id FROM Msg m WHERE m.topic.id = t.id)` - **In 与 Exists 的区别**: `In` 主要用于比较单个值是否存在于列表...

    java面试题

    Hibernate持久化:Hibernate根据定义的映射规则将对象持久化保存到数据库,这就实现了对象的持久化。 Spring由那几个模块组成? 答:Spring主要由7个模块组成: 1:Spring核心容器:提供了Spring框架的基本功能 2...

Global site tag (gtag.js) - Google Analytics