티스토리 뷰

@Formula

Spring boot Hibernate @Formula 사용하여 Count 하기

프로젝트를 진행할 떄 게시판을 만든다는 가정을 한다.

게시글 댓글이 1:N의 관계이다.

만약 게시글을 불러오면서 댓글의 총 갯수를 알고 싶을때 @Formula 어노테이션을 유용하게 사용 할 수 있을 듯하다.

Entity 수정

@Entity
public class Board {
    private Long id;

    private String title;

    private String contents;

    @Formual("(select count(1) from board_comment bc where bc.board_id = id)")
    private int totalCommentCount;
}

@Formula 어노테이션을 붙이면 해당 인스턴스는 가상의 컬럼으로 동작하게 된다.

실제로 Board테이블에 컬럴이 생성되지 않는다

Board board = BoardRepositoy.findById(1L);
int totalCommentCount = board.getTotalCommentCount();
select b.id, b,title, b.contents 
    (select count(1) from board_comment as bc where bc.board_id = b.id) 
from board as b 
where 
    b.id = 1;

실제 쿼리는 subQuery형식으로 가져오게 되므로 @Formula 를 사용할 땐 () 안에 꼭 넣어줘야하며,
alias 를 지정해줘야 한다.

where 절은 PK값만 지정이 가능한 것 같다

 

만약 Lazy Loading을 원하는 경우

@Basic(fetch=FetchType.LAZY) 
@Formual("(select count(1) from board_comment bc where bc.board_id = id)")
private Integer totalCommentCount;

 

References

Hibernate ORM 5.4.17.Final User Guide

JPA 엔터티 카운트 성능 개선하기 | Popit

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함