일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 티스토리챌린지
- jar 배포
- 애자일 싫타
- pinpoint
- hbase 저장공간 설정
- Armeria
- 노드간 통신
- jsonMarshaller
- save/update
- R2DBC Paging
- 논블록킹 성능
- intellij
- 7879
- RedirectService
- reids
- LPOS
- 오블완
- Loki 로그
- UnsupportedOperationException
- formik
- pinpoint 2.5.3
- 월급루팡 일지
- 핀포인트
- ㅉ때
- 개발 어렵당.ㅠ
- fake jwt
- OIDC
- 플루터
- nGinder
- Ingress Controller Fake
- Today
- Total
대머리개발자
[코틀린] queryDSL 본문
☆ 연관된 테이블을 조회하는 2가지 스타일
로또 테이블(lotto)과 그에 대한 통계 테이블(lottoSummary)을 조인에서 하나의 그릇으로 조회를 하고자 한다.
방법 1)
파일썬에서 잠깐 봤던 튜플이 있어서....너무 좋았다. ☆☆☆
fun getLatelyWin() : Tuple? {
return jpaQueryFactory
.select(lotto, summary)
.from(lotto, summary)
.where(lotto.turn.eq(summary.id).and(lotto.type.eq("W")))
.orderBy(lotto.type.desc())
.limit(1)
.fetchOne()
}
조인해서 한방 쿼리 !
Hibernate:
select
l1_0.id,
...,
l2_0.lottoId,
...
from
Lotto l1_0,
LottoSummary l2_0
where
l1_0.turn=l2_0.lottoId
and l1_0.type=?
order by
l1_0.type desc limit ?
튜플 첫번째 놈은 lotto, 두번째놈은 lottoerSummary
방법 2)
@Entity에서 관계를 기술 한다.
@OneToOne
@JoinTable(name = "LottoSummary",
joinColumns = [JoinColumn(name = "id", referencedColumnName="id")],
inverseJoinColumns = [JoinColumn(name = "id", referencedColumnName = "lottoId")],
)
var lottoSummary: LottoSummary?
쿼리 자체는 본 테이블 쿼리와 연관 테이블 쿼리가 각각 발생 2번!
Hibernate:
select
l1_0.id,
....
from
Lotto l1_0
where
l1_0.type=?
order by
l1_0.type desc limit ?
Hibernate:
select
l1_0.lottoId,
....
from
LottoSummary l1_0
where
l1_0.lottoId=?
느낌 빡 오나?!! 엔티티로 기술하면...
단건(get)일 때는 크게 문제 없지만. 여러건(search)으로 요청한다면
= 본 테이블 쿼리(1건) + 여러 쿼리... 발생스(N). => N+1 문제...
정책적으로 확인해서 적절하게 사용하면 된다!!...그냥 한방 쿼리제!!!!!!
방법1과 방법 2를 동시 적용하면...
( https://hcnmy.tistory.com/21 ) 1년전에 작성했던 내용이네. ㅋ
따라서...방법1으로 적용할때는 엔티티에 관계를 기술하지 않는다.
그럼 어디 바구니에 맵핑하냐면? DTO 바구니에! 바로 속!
ToDo : 투두는 꼭 안하더라..ㅎㄷㄷ;
Kotlin JDSL: Kotlin을 이용해 좀 더 쉽게 JPA Criteria API를 작성해 봅시다
들어가며 안녕하세요. Global EC(Global E-Commerce, 이하 GEC)에서 주문 파트 개발을 담당하고 있는 서종현입니다. GEC에서는 서버 프레임워크로 Spring을 주로 사용하며 ORM 기술로 JPA를 사용하고 있습니
engineering.linecorp.com
라인썽님들 고생이 많으심돠!
'개발이야기 > 코틀린' 카테고리의 다른 글
[코틀린] 스프링 배치(2) - 적용 (0) | 2023.09.04 |
---|---|
[코틀린] 스프링 배치(1) - 사전 주저리 (0) | 2023.09.01 |
[코틀린] NULL 처리 (0) | 2023.05.16 |
[코틀린] 스프링 DI (1) | 2023.04.21 |
코틀린 + Spring + JPA (0) | 2023.04.17 |