반응형

spring:

    profileslocal

    jpa:

        hibernate.ddl-autocreate-drop # update

        #none : 기본 값이며 아무 일도 일어나지 않는다.

        #create-only : 데이터베이스를 새로 생성한다.

        #drop : 데이터베이스를 drop 한다.

        #create : 데이터베이스를 drop 한 후, 데이터베이스를 새로 생성한다.(기능적으로는 drop + create-only와 같다)

        #create-drop : SessionFactory가 시작될 때 스키마를 drop하고 재생성하며, SessionFactory가 종료될 때도 스키마를 drop 한다.

        #validate : 데이터베이스 스키마를 검증 한다.

        #update : 데이터베이스 스키마를 갱신 한다.


<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

+ Recent posts