티스토리 뷰
@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
- JPA
- java11
- 유사결과
- Security
- 스프링시큐리티
- Spring
- @formula
- ubuntu
- 자바
- 웹서비스
- howtoinstallnginx
- spring web
- booleanExpression
- 스프링부트
- FastAPI
- mapstruct
- 개발
- ControllerAdvice
- 스프링부트 시작하기
- like절
- ResourceHttpReqeustHandler
- 스프링
- API
- Python
- boot
- paawordencoder
- springsecurity
- Java
- springboot
- QueryDSL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함