작성
·
138
0
자바 17로 하면 아래같이 코드를 캐스캐이드 하라고 나옵니다. cq.where(cb.and(criteria.toArray(new Predicate[criteria.size()]))); 이부분은 캐스캐이드 해줘도 빨간줄이 나옵니다. 혹시 17버전으로 작동되는 코드는 어떤것이 있을까요?
package jpabook.jpashop.repository;
import jakarta.persistence.EntityManager;
import jakarta.persistence.TypedQuery;
import jakarta.persistence.criteria.*;
import jpabook.jpashop.domains.Order;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
@Repository
@RequiredArgsConstructor
public class OrderRepository {
private final EntityManager em;
public void save(Order order){
em.persist(order);
}
public Order fineOne(Long id){
return em.find(Order.class,id);
}
// public List<Order> findAllByString(OrderSearch orderSearch){
// QOrder order=QOrder.order;
//
// }
/**
* JPA Criteria
*/
public List<Order> findAllByCriteria(OrderSearch orderSearch) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Order> cq = cb.createQuery(Order.class);
Root<Order> o = cq.from(Order.class);
Join<Object, Object> m = o.join("member", JoinType.INNER);
List<Predicate> criteria = new ArrayList<>();
//주문 상태 검색
if (orderSearch.getOrderStatus() != null) {
Predicate status = (Predicate) cb.equal(o.get("status"), orderSearch.getOrderStatus());
criteria.add(status);
}
//회원 이름 검색
if (StringUtils.hasText(orderSearch.getMemberName())) {
Predicate name =
(Predicate) cb.like(m.<String>get("name"), "%" + orderSearch.getMemberName() + "%");
criteria.add(name);
}
cq.where(cb.and(criteria.toArray(new Predicate[criteria.size()])));
TypedQuery<Order> query = em.createQuery(cq).setMaxResults(1000);
return query.getResultList();
}
}
답변 1
이런 오류 해결은 어떻게 검색해야 알 수 있나요?