spring:
profiles: local
jpa:
hibernate.ddl-auto: create-drop # update
#none : 기본 값이며 아무 일도 일어나지 않는다.
#create-only : 데이터베이스를 새로 생성한다.
#drop : 데이터베이스를 drop 한다.
#create : 데이터베이스를 drop 한 후, 데이터베이스를 새로 생성한다.(기능적으로는 drop + create-only와 같다)
#create-drop : SessionFactory가 시작될 때 스키마를 drop하고 재생성하며, SessionFactory가 종료될 때도 스키마를 drop 한다.
#validate : 데이터베이스 스키마를 검증 한다.
#update : 데이터베이스 스키마를 갱신 한다.
- queryDSL에 Spring Pageable 객체의 sorting 적용해서 orderBY하기
- 검색하다 찾은 spring JPA, queryDSL 자료 - 자세함
- 1:N 관계데이터에서 join하지 않고 간단히 찾을수 있는 방법
- program.multiLanguageList.any().title.like("%" + programTitle + "%")
<Before - join>
@Override
public Page<Program> findDynamicQuery(Pageable pageable, String providerId, String programName) {
JPQLQuery<Program> query = queryFactory.selectFrom(program).distinct()
.join(program.multiLanguageList, programMultiLanguage)
.on(program.eq(programMultiLanguage.program))
.where(likeProviderId(providerId), likeProgramTitle(programName))
.offset(pageable.getOffset()).limit(pageable.getPageSize());
PathBuilder<Program> entityPath = new PathBuilder<>(Program.class, "program");
for (Sort.Order o : pageable.getSort()) {
PathBuilder<Object> path = entityPath.get(o.getProperty());
query.orderBy(new OrderSpecifier(Order.valueOf(o.getDirection().name()), path));
}
QueryResults<Program> results = query.fetchResults();
return new PageImpl<>(results.getResults(), pageable, results.getTotal());
}
private BooleanExpression likeProgramTitle(String programTitle) {
if ("".equals(programTitle)) {
return null;
}
return programMultiLanguage.title.like("%" + programTitle + "%");
}
<After - join안하고 더 간단히>
@SuppressWarnings("unchecked")
@Override
public Page<Program> findDynamicQuery2(Pageable pageable, String providerId, String programName) {
// order by 조건이 먼저 붙어야 할 수도 있을듯, 확인해봐야함
JPQLQuery<Program> query = queryFactory.selectFrom(program)
.where(likeProviderId(providerId), likeProgramTitle2(programName))
.offset(pageable.getOffset()).limit(pageable.getPageSize());
PathBuilder<Program> entityPath = new PathBuilder<>(Program.class, "program");
for (Sort.Order o : pageable.getSort()) {
PathBuilder<Object> path = entityPath.get(o.getProperty());
query.orderBy(new OrderSpecifier(Order.valueOf(o.getDirection().name()), path));
}
QueryResults<Program> results = query.fetchResults();
return new PageImpl<>(results.getResults(), pageable, results.getTotal());
}
private BooleanExpression likeProgramTitle2(String programTitle) {
if ("".equals(programTitle)) {
return null;
}
return program.multiLanguageList.any().title.like("%" + programTitle + "%");
}
query구하고 실행까지 하려면
select는 query.fetch(), update는 query.update() 이런식으로 가능함
com.lge.cdp.model.QChannel.channel를 찾을 수 없다는 에러가 뜬다면
cdp-web/.classpath파일을 열어 아래 항목을 추가하면 됩니다.
<classpathentry kind="src" path="target/generated-sources/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
<attribute name="ignore_optional_problems" value="true"/>
<attribute name="m2e-apt" value="true"/>
</attributes>
</classpathentry>
'java, spring' 카테고리의 다른 글
Jwt Token Expire 주기 설정 (0) | 2019.11.27 |
---|---|
Spring pageation (0) | 2019.11.25 |
javax.validation.constraints.NotBlank vs NotNull (0) | 2019.11.12 |
spring error (0) | 2019.06.14 |
spring (0) | 2019.06.12 |