2017-04-21 13 views
1

우리가 이런 DTO (예를 들어)에 최종 결과를 투사 할 수있는 JPA2 기준 쿼리를 사용하여 이는 틀린 말입니다. 이전의 (현재 사용되지 않음) 최대 절전 기준 API를 사용하여 프로젝션 목록을 사용할 수 있습니다 :JPA 2 개 기준 쿼리 프로젝션

ProjectionList projectionList = Projections.projectionList();

projectionList.add(Projections.property("id"), "id"); 
    projectionList.add(Projections.property("name"), "name"); 

이는 DTO의 매개 변수 순서에 종속되지 않습니다.

JPA에서 유사한 전략을 사용할 수 있습니까?

답변

0

더 높은 수준의 추상화를 제공하고이 프로젝션 문제를 해결하는 QueryDSL로 옮겼습니다. 그래서 쿼리가 엔티티를로드하고 말했다 엔티티에 대한 DTO를 반환됩니다 : CompanyDTO이 회사의 법인에 대한 생성자를 포함

public List<CompanyDTO> findByCompanyId(String companyId) { 
    JPAQuery<?> query = new JPAQuery<Void>(em); 

    QCompany company = QCompany.company; 

    return query.from(company) 
      .where(company.companyId.eq(companyId)) 
      .select(Projections.constructor(CompanyDTO.class, company)) 
      .fetch(); 
} 

합니다.

0

나는 이렇게 생각하지 않는다. 인수 순서는 JPA에서 일치해야한다. Java 8까지는 바이트 코드에 디버그 정보가 포함 된 경우에만 매개 변수 이름을 사용할 수 있었기 때문일 수 있습니다. 내 생각에 대부분의 JPA 공급자는 Constructor.newInstance()으로 전화를 걸며 여기서 인수는 올바르게 주문해야합니다.