0. 前
主要记录日常工作中,遇到的难搞的、上网查了很久的JPA方法实现的查询语句
1. 子表查询、B表只要一条记录
if (StringUtils.isNotBlank(qySfkzpx)) { Subquerysubquery = criteriaQuery.subquery(Long.class); Root rootWai = subquery.from(SCjtj.class); subquery.select(criteriaBuilder.count(rootWai)).where(criteriaBuilder.equal(root.get(TQy_.qyBh), rootWai.get(SCjtj_.qyBh))); Predicate prd = criteriaBuilder.gt(subquery, Long.valueOf(0)); if ("0".equals(qySfkzpx)) { prd = criteriaBuilder.not(prd); } prdChaXun = getAndPredicate(prdChaXun, criteriaBuilder, prd); }
SELECT t0.qy_id, t0.qy_aqjddj, t0.qy_bh, t0.qy_by1, t0.qy_by2, t0.qy_by3, t0.qy_by4, t0.qy_by5, t0.qy_by6, t0.qy_by7, t0.qy_by8, t0.qy_bz, t0.qy_clrq, t0.qy_cpjs, t0.qy_cz, t0.qy_dlm, t0.qy_dwjs, t0.qy_fr, t0.qy_gszy, t0.qy_gwhymc, t0.qy_jc, t0.qy_jgdm, t0.qy_jjlxmc, t0.qy_jjxzmc, t0.qy_jyfw, t0.qy_jyxk, t0.qy_lxdh, t0.qy_lxr, t0.qy_lxryx, t0.qy_mc, t0.qy_mm, t0.qy_pgfjmc, t0.qy_qq, t0.qy_qylx, t0.qy_sfgd, t0.qy_spzt, t0.qy_szdz, t0.qy_szyzbm, t0.qy_xzzgbm, t0.qy_yyqx, t0.qy_yyzzqk, t0.qy_zcdz, t0.qy_zcyzbm, t0.qy_zczb, t0.qy_zzzch FROM t_qy t0 WHERE ((SELECT COUNT(t1.cjtj_id) FROM s_cjtj t1 WHERE (t0.qy_bh = t1.qy_bh)) > 0)
2. 跨表查询
RootrootTQyrydy = criteriaQuery.from(TQyrydy.class);
跟上面差不多了