Auditing을 이용한 엔티티 공통 속성화
@MappedSuperclass
@Getter @Setter
public class BaseEntity {
@CreationTimestamp
private LocalDateTime createdAt;
@UpdateTimestamp
private LocalDateTime modifiedAt;
}
@EnableJpaAuditing
@Configuration
public class MvcConfig implements WebMvcConfigurer {
}
@MappedSuperclass
@Getter @Setter
@EntityListeners(AuditingEntityListener.class)
public class BaseEntity {
@CreatedDate
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime modifiedAt;
}
JPQL
@Scheduled
1) fixedDelay
2) fixedRate
3) initialDelay
4) cron
5) @EnableScheduling
Repository 설계하기
- S save(S entity) : persist(...) : 영속성 상태로 추가
- S saveAndFlush(S entity) : persist() + flush()
- List<S> saveAll(Collection<S> ...)
- List<S> saveAllAndFlush(....)
- void delete(T entity) : remove(...)
- count()
- Iterable findAll()
- S findOne(..)
S findById(기본키)
... get...
참고)
find로 시작하는 메서드 : 영속 상태
get로 시작하는 메서드 : 비영속 상태 - 상태변화 감지 X
-flush() : 상태 변화 감지 -> DB 에 반영
-> 메서드가 길어질 수 있음.
JPQL(Java Persistence Query Language)
Querydsl - 비표준
레포지토리 정의
:QueryDslPredicateExecutor를 함께 상속 -> 기존 Repository 메서드에 Predicate가 매개변수인 메서드가 추가된다.
Q클래스
eq: =
lt : <
loe: <=
gt: >
goe: >=
BooleanBuilder
-and(Predicate...)
-or(Predicate...)
-not(Predicate...)
관계 매핑
지연 로딩..
JPAQueryFactory
JPAQuery
implementation 'com.querydsl:querydsl-jpa:5.1.0:jakarta'
annotationProcessor 'com.querydsl:querydsl-apt:5.1.0:jakarta'
-----------------------------------------------------------
tasks.named('test') {
useJUnitPlatform()
}
def querydslDir = layout.buildDirectory.dir("generated/querydsl").get().asFile
sourceSets {
main.java.srcDirs += [ querydslDir ]
}
tasks.withType(JavaCompile) {
options.getGeneratedSourceOutputDirectory().set(file(querydslDir))
}
clean.doLast {
file(querydslDir).deleteDir()
}
간단하고 고정된 조건에는 BooleanExpression을, 복잡하고 동적으로 변하는 조건에는 BooleanBuilder를 사용하는 것이 이득.