TypedQuery<Member> query = em.createQuery("select m from Member m",Member.class");
List<Member> members = query.getResultList();
기존에 Spring에서는 이렇게 EntityManager를 통해 직접 짜서 사용해야했는데 Spring Data JPA 는 확실히 편리해진 것 같다.
주로
@Query("SELECT m FROM Member m");
public List<Member> getResultList();
JpaRepository<Entity,Id> 를 상속한 인터페이스에 위처럼 작성한 뒤 가져다 쓰면 사용이 가능하다.
order by를 이용한 정렬
order by를 native query와 동일하게 정렬 순서를 지정할 수 있다. 근데 다른 점은 여기서는 컬럼이 아닌 엔티티의 멤버변수를 통해 지정한다.
SELECT m FROM Member m ORDER BY m.username;
SELECT m FROM Member m ORDER BY m.username ASC;
SELECT m FROM Member m ORDER BY m.username DESC;
오름차순과 내림차순 정렬은 각각 asc와 desc로 지정할 수 있다. 기존 SQL과 마찬가지로 정렬 순서를 생략하면 오름차순을 사용한다.
만약 두 개이상을 기준으로 잡고 싶을 경우는 콤마(,)를 통해 구분한다.
SELECT m FROM Member m ORDER BY m.username, m.gender;
만약 여기서 연관관계가 맺어진 객체에 맴버변수를 하고 싶은 경우라면, Member가 Group을 @ManyToOne으로 참조하고 @JoinColumn이 "group_id" 일 경우
SELECT m FROM Member m ORDER BY m.group.id, m.username;
연관 객체의 식별자(FK) 뿐만 아니라 다른 칼럼도 order by 절에서 사용할 수 있다.
SELECT m FROM Member m ORDER BY m.group.name;
m.group.name은 은 Member(@ManyToOne)와 연관된 Member(@OneToMany) 엔티티의 name 멤버를 의미한다.
이렇게 작성할 경우 실제 동작하는 쿼리는 cross join으로 두 테이블을 불러와서 order by를 실행한다.
'JPA' 카테고리의 다른 글
JPA - Querydsl로 max값 뽑기 (0) | 2023.05.04 |
---|---|
JPA - fetchJoin, Inner join (0) | 2023.03.03 |
Redis - 개념 및 Spring에서 사용 (1) | 2023.01.25 |
JPA - 연관관계 Insert Query 줄이기 (0) | 2022.12.19 |