您需要
Specification像这样的实用程序类
public class EntitySpecifications { public static Specification<Entity> firstIdEquals(Optional<Long> firstId) {// or Long firstId. It is better to avoid Optional method parameters. return (root, query, builder) -> firstId.isPresent() ? // or firstId != null if you use Long method parameter builder.equal(root.get("firstId"), firstId.get()) : builder.conjunction(); // to ignore this clause } public static Specification<Entity> secondIdEquals(Optional<Long> secondId) { return (root, query, builder) -> secondId.isPresent() ? builder.equal(root.get("secondId"), secondId.get()) : builder.conjunction(); // to ignore this clause }}然后你
EntityRepository必须扩展
JpaSpecificationExecutor
@Repositorypublic interface EntityRepository extends JpaRepository<Entity, Long>, JpaSpecificationExecutor<Entity> {}用法:
@Servicepublic class EntityService { @Autowired EntityRepository repository; public List<Entity> getEntities(Optional<Long> firstId, Optional<Long> secondId) { Specification<Entity> spec = Specifications.where(EntitySpecifications.firstIdEquals(firstId)) //Spring Data JPA 2.0: use Specification.where .and(EntitySpecifications.secondIdEquals(secondId)); return repository.findAll(spec); }}


