JAVA

java dynamic query

말하는감자 2020. 5. 15. 14:24
@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;
}