2014-11-22 2 views
1

나는 querydsl을 처음 접했을뿐만 아니라 이미이 쿼리에 별칭을 사용하는 방법을 알 수 없다.querydsl에서 별칭을 사용하는 방법?

java.lang.IllegalArgumentException가 : org.hibernate.hql.internal.ast.QuerySyntaxException :

QProduct product = QProduct.product; 
    JPQLQuery jPQLQuery = 
      from(product) 
      .where(product.name.locate(searchTerm).as("score").gt(0).or(product.code.locate(searchTerm).as("score").gt(0))).groupBy(product.baseProd); 
    List<Product> matchedNames = jPQLQuery.orderBy(new NumberPath<Integer>(Integer.class, "score").asc()).offset((pageNumber-1)*10).limit(10).list(product); 

내 첫번째 생각은 생성 된 쿼리에서 오류가 발생하는이 같은했다 예기치 토큰 : as line 3, column 31 [제품을 mesoft.meshopframework.model.content product에서 (> 1, product.name)을 점수>? 2로 찾거나 다음과 같이 (? 1, product.code)를 찾습니다. 점수>? 2 그룹 by product.base 순위 별 점수 오름차순

누군가 나에게 이것을 할 coorect 방법을 보여줄 수 있었습니까 ?? 나는, DB 정렬에 다시 product.name.locate(searchTerm) 또는 다른 하나를 계산하는 것이 필요는 없습니다

감사

답변

1

JPQL은 SQL에 비해보다 제한된 문법을 가지고 희망하지만, 나도 당신의 예제는 SQL에서 작동 것이라고 생각하지 않습니다 .

where 부분에 별칭을 사용할 수 없으며 주문의 경우 위치 지정 표현식 중 하나를 선택하거나 두 위치 모두에서 순서를 지정해야합니다.

+0

yea, 나는 locate 식으로 정렬하려고했습니다. 그러나 나는 쿼리하는 세계에 처음으로 익숙해 졌기 때문에 나는 그렇지 않다는 것을 알았습니다. "DB 엔진이 정렬 식을 다시 계산한다는 것을 의미합니까? 그리고 그것을 방지하는 방법은 무엇입니까?" – azerafati

+0

재 계산 측면은 DB 엔진에 따라 다릅니다. 어느 쪽을 사용합니까? –

+0

어, DB 엔진도 그런 것들을 고려할 수 있을까요 ?? 좋은! – azerafati