Cute Running Puppy
본문 바로가기
개발일기/Java

JPA Query 사용하기

by 징구짱 2023. 3. 23.
728x90

인스타 처럼 태그 값을 저장하고 Top3를 선정하는 로직을 짜기 위해서는

JPA 기본 메서드로 해결이 되지 않아서 Query문을 직접 작성하여 불러오는 방법을 사용해 보았다!

 


Entity

우선 Tag를 저장하는 Entity는 이렇게 설계했다.

  • id : 키값
  • post : 저장할 게시물
  • tag : 태그명

해당 태그를 한 게시글을 가져와야하니 JoinColumn으로 Post 객체를 연결했고

게시물에 태그가 여러개 등록되므로 @ManyToOne을 설정했다.

@Getter
@Entity
@NoArgsConstructor
public class Tag {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    @JoinColumn( name = "postId")
    private Post post;

    @Column
    private String tag;

    public Tag(Post post, String tag) {
        this.post = post;
        this.tag = tag;
    }
}

 


Query

@Query(value = "SELECT t.tag as tag FROM Tag t group by t.tag order by count(t.tag) desc limit 3", nativeQuery = true)


@Query
: 직접 쓴 Query문으로 실행 가능

t.tag as tag : 가져올 컬럼

group by t.tag : 같은 tag끼리 묶기

order by count(t.tag) desc : 묶은 tag의 count수가 큰것부터 정렬

limit 3 : 세 개까지 조회

nativeQuery = true : Query문을 sql에 직접 실행하겠다는 의미. select 했을 때 객체 자체로 조회할 수 없음

@Query(value = "SELECT t.tag as tag FROM Tag t group by t.tag order by count(t.tag) desc limit 3", nativeQuery = true)
List<String> findAllByCount();
728x90