• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

주문조회 질문입니다.

24.04.20 02:28 작성 조회수 58

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

답변을 작성해보세요.

0

OMG님의 프로필

OMG

2024.04.20

안녕하세요. zzzzz님, 공식 서포터즈 OMG입니다.

마지막 import를 지우면 됩니다.

import java.util.function.Predicate;

image

Predicate는 jarkarta.persistence.criteria 의 것을 사용하는데, 이는 이미

import jakarta.persistence.criteria.*;

이걸 통해 포함되기 때문입니다.

 

감사합니다.

zzzzz님의 프로필

zzzzz

질문자

2024.04.22

이런 오류 해결은 어떻게 검색해야 알 수 있나요?

OMG님의 프로필

OMG

2024.04.22

코드를 확인했을 때 질문으로 남기신 상황이 재현이 되었고,

우선 코드의 import문을 전부 지우고 하나씩 import하다보니 차이를 확인하였습니다 ^^