-
Notifications
You must be signed in to change notification settings - Fork 0
QueryDsl More Type safety
정명주(myeongju.jung) edited this page Oct 14, 2017
·
11 revisions
본 문서는 QueryDsl를 더 Type-safety 하게 쓸수 있는 팁을 정리하는 문서임.
-
Projections.constructor
를 사용하는 경우 생성자의 시그네쳐가 변경되는 경우 컴파일 시 오류를 찾을 수 없음.
Projections.constructor
PartnerRepository.java
QPartner partner = QPartner.partner;
QCompany company = QCompany.company;
return from(partner, company)
.where(predicate)
.select(Projections.constructor(PartnerSummary.class, partner, company))
.fetch();
PartnerSummary의 생성자의 시그네쳐가 바뀌면 ??
- Runtime 시 확인가능
@QueryProjection
PartnerRepository.java
QPartner partner = QPartner.partner;
QCompany company = QCompany.company;
return from(partner, company)
.where(predicate)
.select(new QPartnerSummary(partner, company))
.fetch();
PartnerSummary의 생성자의 시그네쳐가 바뀌면 ??
- Compile 시 확인가능
PartnerSummary.java
@Value // !!
public class PartnerSummary {
@QueryProjection // !!
public PartnerSummary(Partner partner, Company company) {
// ...
}
}
- 출력용 DTO에
@QueryProjection
를 설정해서 해당 생성자의 QType를 만들어서 사용한다.
@QueryProjection is better than Projections.constructor
-
Projections.constructor
보다 DTO 생성자에@QueryProjection
를 설정해서 해당 생성자의 QType를 만들어서 사용하는 것이 더 Type-safety하다. - 그리고 DTO 일지라도 출력(조회)를 위한 DTO 라면 값객체 형태로써 불변화 시키는 것이 더 Side-effect 없는 코드가 된다.
JAVA
JPA
- JPA-Create-And-Update
- Optional-Eager
- QueryDsl-Configuration
- QueryDsl-More-Type-safety
- QueryDsl-SubQuery
DDD
Install
Spring
Spring-Boot
- Swagger2-Configuration
- Spring-Restdocs-Configuration
- Spring-Page-Jackson
- JSR310-Guide
- logback-spring.xml
- WebMvcUtils.java
- Spring-Boot-Properties
- Spring-Boot-Hidden-Gems
- Spring-Boot-Config
Spring-Cloud
- Spring-Cloud-Zuul
- Spring-Cloud-Feign
- Spring-Cloud-Hystrix
- Spring-Cloud-Consul
- Spring-Cloud-Ribbon
- Spring-Cloud-Circuit-Breaker
JavaScript
Gradle
Test
Linux
Etc
TODO http://zoltanaltfatter.com/2017/06/09/publishing-domain-events-from-aggregate-roots/