欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

hibernate 利用子查询实现 exists 功能 博客分类: Hibernate hibernate 

程序员文章站 2024-03-16 16:32:10
...

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