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
'개발일기 > Java' 카테고리의 다른 글
nativeQuery 사용법 (0) | 2023.04.11 |
---|---|
IntelliJ 테스트 코드 한글 깨짐 현상 해결 (0) | 2023.03.30 |
Cors 에러가 뜨는 이유와 해결 (0) | 2023.03.20 |
userDetails 유저 정보 받아오기 비회원일 때 (0) | 2023.03.19 |
커스텀 한 예외를 글로벌로 예외 처리하기 (0) | 2023.03.17 |