如何在以下代码中的specification中加入一个关联另一张表的查询条件 public Page<Part> findByCriteria(PartCriteria criteria, Pageable page) { log.debug("find by criteria : {}, page: {}", criteria, page); final Specification<Part> specification = createSpecification(criteria); return partRepository.findAll(specification, page); }
时间: 2024-03-12 14:49:12 浏览: 82
JPA2.0中的动态类型安全查询
要在`specification`中加入一个关联另一张表的查询条件,你可以使用`Join`来连接两张表,然后通过`CriteriaBuilder`来构建查询条件。以下是示例代码:
```java
public Page<Part> findByCriteria(PartCriteria criteria, Pageable page) {
log.debug("find by criteria : {}, page: {}", criteria, page);
final Specification<Part> specification = new Specification<Part>() {
@Override
public Predicate toPredicate(Root<Part> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
List<Predicate> predicates = new ArrayList<>();
// Join另一张表
Join<Part, OtherTable> join = root.join("otherTable", JoinType.LEFT);
// 添加关联表的查询条件
predicates.add(criteriaBuilder.equal(join.get("column"), "value"));
// 添加Part表的查询条件
// ...
return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
}
};
return partRepository.findAll(specification, page);
}
```
其中,`Part`和`OtherTable`是两张表的实体类,"otherTable"是`Part`中关联`OtherTable`的属性名称,"column"是`OtherTable`中需要查询的属性名称,"value"是需要查询的属性值。你需要根据实际情况修改这些变量名。
阅读全文