개발일기/Java
JPA Query 사용하기
징구짱
2023. 3. 23. 02:02
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