如SQL:
select assets_entity.* from assets_entity
left join (
select inventory_recording.assets_entity_id from inventory_recording where inventory_recording.inventory_task_id = ?
) as irr
on assets_entity.id = irr.assets_entity_id
where irr.assets_entity_id is null;
下面是我写到一半的,可是root.join不知道怎么放子查询
private void listsss(){
Specification<AssetsEntity> specification = new Specification<AssetsEntity>() {
@Override
public Predicate toPredicate(Root<AssetsEntity> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
//Path<String> assetsNumberPath = root.get("assetsNumber");
// 完成子查询
Subquery subQuery = criteriaQuery.subquery(String.class);
Root IRFrom = subQuery.from(InventoryRecording.class);
subQuery.select(IRFrom.get("assetsEntity")).where(criteriaBuilder.equal(IRFrom.get("inventoryTask"), 1L));
// left join
List<Predicate> predicates = new ArrayList<>();
Predicate[] array = new Predicate[predicates.size()];
criteriaQuery.where(predicates.toArray(array));
return null;
}
};
}
https://blog.csdn.net/u012448083/article/details/85257339
复杂的sql通过本地sql完成
这样以后做索引优化和二次维护都好弄
jpa只适合单表操作,现在项目一般采用spring jpa和spring jdbc模式一起
spring jdbc负责复杂sql
参考我自己项目
https://github.com/baichangda/MySpringBootFrame.git
像这种复杂的直接拼 SQL语句会方便些