@PersistenceContext(unitName="db")
private EntityManager entityManager;
public List<TestDto> dynamicRepository(TestSearchValue testSearchValue) {
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<TestEntity> query = cb.createQuery(TestEntity.class);
Root<TestEntity> testEntity = query.from(TestEntity.class);
List<Predicate> predicate = makeDynamicQuery(testSearchValue, cb, testEntity);
query.where(cb.and(predicate.toArray(new Predicate[predicate.size()])));
List<TestEntity> testEntityResult = Optional.ofNullable
(entityManager.createQuery(query)).orElse(Collections.emptyList());
}
statis List<Predicate> makeDynamicQuery(TestSearchValue testSearchValue,
CriteriaBuilder cb, Root<?> root) {
List<Predicate> predicate = new ArrayList<>();
if(testSearchValue.getUserId() != null)
predicate.add(cb.equal(root.get("userId"), testSearchValue.getUserId()));
return predicate;
}