JPA의 Pagination을 사용하려는데 계속 아래와 같은 에러가 발생하였음
org.springframework.data.mapping.PropertyReferenceException: No property 'orders' found for type 'Orders'; Did you mean 'ordersId'
Orders 엔티티
@Entity
@NoArgsConstructor
@AllArgsConstructor
public class Orders extends BaseTime {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long ordersId;
private String orderNumber;
private int totalPrice;
@Enumerated(EnumType.STRING)
private OrdersStatus orderStatus;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id")
private Member member;
}
OrdersRepository
@Repository
public interface OrdersRepository extends JpaRepository<Orders, Long> {
Page<Orders> findAllByMember_MemberId(Long memberId, Pageable pageable);
}
1. 쿼리 메서드 의심
처음에는 JPA Query Method에서 Orders의 필드 중 객체로 저장된 member와 Long 자료형의 memberId와 비교하려 하는 것이 문제인 줄 알고 아래처럼 여러 쿼리 메서드를 시도하였으나, 모두 같은 에러가 발생
@Repository
public interface OrdersRepository extends JpaRepository<Orders, Long> {
Page<Orders> findAllByMember(Long memberId, Pageable pageable);
Page<Orders> findAllByMember_Id(Long memberId, Pageable pageable);
Page<Orders> findAllByMember_MemberId(Long memberId, Pageable pageable);
}
2. 기본 메서드도 작동하지 않는 지 확인
JpaRepository에 있는 기본 findAll() 메서드도 정상적으로 작동하였는데, findAll()에 pageable을 넣었더니 같은 에러 발생
public List<OrdersGameResponseDto> allList(Long memberId, int pageNo, int size) {
Pageable pageable = PageRequest.of(pageNo, size, Sort.by(Sort.Direction.DESC, "orders_id"));
// Page<Orders> page = ordersRepository.findAllByMember_MemberId(memberId, pageable);
System.out.println(ordersRepository.findAll()); // 정상 실행
Page<Orders> page = ordersRepository.findAll(pageable); // 에러 발생
System.out.println(page);
return List.of();
}
3. Pageable에 문제가 있다고 생각되어 Pageable PropertyReferenceException로 구글링하여 동일한 문제를 해결한 블로그를 찾음
- 나도 마찬가지로 Orders 엔티티에 orders는 어디서 튀어나온 필드인가 의아했음
- 아래의 블로그에 의하면 JPA에서는 변수명을 자동으로 해석하여 매핑하는데 변수명에서 언더바(_)와 같은 접미사는 관례적으로 외래키(ForeignKey)를 의미하는 컬럼으로 간주하여, orders_id를 orders로 인식을 한다고 함
- PageRequest.of()에서 정렬하는 값 orders_id를 ordersId로 변경하여 문제 해결
public List<OrdersGameResponseDto> allList(Long memberId, int pageNo, int size) {
Pageable pageable = PageRequest.of(pageNo, size, Sort.by(Sort.Direction.DESC, "ordersId"));
// Page<Orders> page = ordersRepository.findAllByMember_MemberId(memberId, pageable);
System.out.println(ordersRepository.findAll()); // 정상 실행
Page<Orders> page = ordersRepository.findAll(pageable); // 정상 실행
System.out.println(page);
return List.of();
}
https://clin0927.tistory.com/74
'Various Error' 카테고리의 다른 글
[Eureka] Eureka Client의 UnsatisfiedDependencyException 에러 (0) | 2024.08.20 |
---|---|
[JSON] HttpMediaTypeNotAcceptableException (0) | 2024.08.19 |
[JSON] InvalidDefinitionException (0) | 2024.08.19 |
[Lombok] @Getter 어노테이션 에러 (0) | 2024.08.09 |
[IntellJ] application.yml 사용 시 데이터베이스 연동 주의 사항 (0) | 2024.08.04 |