`

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);
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics