티스토리 뷰
@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
'Dev > Spring' 카테고리의 다른 글
Spring Web Static Resources (0) | 2020.11.11 |
---|---|
Spring boot 프로젝트 만들기 (0) | 2020.10.21 |
Spring에서 RestTemplate로 API 호출하기 (0) | 2020.09.01 |
Spring Security 적용해보기 (0) | 2020.06.02 |
Spring Security Password Encoder 적용해보기 (0) | 2020.06.01 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- FastAPI
- springboot
- JPA
- Security
- 스프링
- Python
- 스프링부트
- Spring
- API
- 유사결과
- ControllerAdvice
- mapstruct
- 자바
- 스프링부트 시작하기
- spring web
- booleanExpression
- boot
- like절
- 웹서비스
- QueryDSL
- @formula
- paawordencoder
- Java
- howtoinstallnginx
- ResourceHttpReqeustHandler
- 스프링시큐리티
- ubuntu
- springsecurity
- java11
- 개발
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함