반응형

두 개의 Entity 가 @OneToMany, @ManyToOne 어노테이션을 활용하여 1:N 관계로 맵핑이 되어 있는 경우에 JPA 로 부모 Entity 를 조회하게 되면 자식 Entity 들도 알아서 조회가 된다. 매번 부모 Entity 기준으로만 조회를 했었어서 함께 조회되는 자식 Entity 에 대해서는 크게 신경을 쓰지 않았었다. 그런데 조회한 자식 Entity 를 최신순으로 정렬해야 하는 필요성이 생겨서 고민을 하다가 @OrderBy 라는 어노테이션으로 해결한 케이스를 적어본다. 생각보다 간단했다.
문제 상황
1:N 관계의 두 개의 Entity 가 존재한다. 부모 Entity 는 Product 이고, 자식 Entity 는 ProductHistory 이다.
@Entity
public class Product {
@Id
private Long productId;
@OneToMany(
mappedBy = "product"
)
private List<ProductHistory> productHistories = new ArrayList<>();
}
@Entity
public class ProductHistory {
@Id
private Long productHistoryId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "product_id")
private Product product;
}
Product 을 조회하면 맵핑되어 있는 ProductHistory 를 함께 조회할 수 있는데 ProductHistory 의 정렬 순서는 id ASC 순이다. 만약 다른 필드 기준으로 정렬을 하고 싶다면 @OrderBy 어노테이션을 활용하면 된다.
@OrderBy 를 이용해 해결하기
부모 Entity 에서 @OrderBy 어노테이션을 부여하면서 대상 테이블의 필드와 정렬/역정렬을 지정해주면 된다. 기본값은 PK ASC 이다.
@Entity
public class Product {
@Id
private Long productId;
@OneToMany(
mappedBy = "product"
)
@OrderBy("product_history_id DESC") // 추가
private List<ProductHistory> productHistories = new ArrayList<>();
}반응형
'JPA' 카테고리의 다른 글
| [JPA] Spring 에서 JPA 사용하기 (0) | 2023.02.11 |
|---|---|
| [JPA] @ManyToOne, @OneToMany 를 활용하기 (0) | 2023.02.10 |
| [JPA] @EnableJpaAuditing 활용하기 (3) | 2023.02.03 |
댓글