[Spring]@Formula 어노테이션으로 '좋아요 수' 구하기

RUreadyYe·2022년 9월 3일
0

트러블슈팅

목록 보기
2/5

spring으로 게시글에 좋아요 등록 / 취소 기능을 구현하고
게시글 response에 해당 게시글의 총 좋아요 수를 구하려고 했다.

그때 heart 테이블을 구성했던 필드는

Heart.java

public class Heart { 

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @JoinColumn(name = "member_id", nullable = false)
    @ManyToOne(fetch = FetchType.LAZY)
    private Member member;

    @JoinColumn(name = "post_id", nullable = false)
    @ManyToOne(fetch = FetchType.LAZY)
    private Post post; 
    
  }

member 모델의 id와 post 모델의 id를 관계 매핑한 것이어서
처음 딱 들었던 생각이

post 테이블에도 heart가 @OneToMany에 orphanRemoval = true로 관계되어 있으니 해당 게시글의 id가 포함된 heart의 개수를 알 수 있는 옵션이 있지 않을까..?
하고 찾다가 발견한게 @Formula 어노테이션이다.

@Formula란?

Hiberante에서 제공하는 @Formula 어노테이션으로 사용하면 가상 컬럼을 매핑할 수 있다. 가상 컬럼이란 jpa상에는 존재하지만 실제 DB에는 저장되지 않는 컬럼을 말한다.

Post.java

 @Formula("(select count(1) from heart he where he.post_id = id)")
 private int totalHeartCount;

heart 모델의 post id가 id인 값을 모두 count한다는 sql문이다.
게시글 response를 빌드할 때 totalHeartCount만 담아주면 좋아요 개수가 잘 구해졌다.

count(*) = count(1)로 해당 조건 전체를 count 한다는 뜻


근데 양방향 관계매핑으로 여러 모델이 얽혀있는 코드는 여러가지로 속을 썩여서 웬만하면 다신 안하려고 한다..
더 좋은 해결방법이 있었을 것 같은데 다음엔 다른 방법을 써봐야지!

profile
기억력이 짧은 나를 위한 기록 🍀

0개의 댓글