2014-02-19 7 views
1
public class ProductDTO { 
    public ProductDTO(final String name, final Boolean isBrandNew) { ... } 
} 

QProduct product = QProduct.product 

Expression<Boolean> isBrandNew = new CaseBuilder() 
    .when(product.creaDate.eq(product.modDate)).then(Boolean.TRUE) 
    .otherwise(Boolean.FALSE) 
    .as("brandNewProduct") 

JPAQuery query = new JPAQuery (this.em); 
query.from(product) 
    .where(product.name.eq("blah")) 
    .listDistinct(ConstructorExpression.create(ProductDTO 
    , product.name 
    , isBrandNew)) 

내 쿼리의 최종 선택 성명에서 "brandNewProduct"열을 포함 할 것 CaseBuilder에 대한 올바른 설정은 무엇입니까 QueryDSL에서 ConstructorExpression 및 CaseBuilder에 대한 JPA 예? 지금, 나는 최대 절전 모드에서 얻을 수있는 모든 예외 미래의 참조의QueryDSL : 2.9.0

org.hibernate.hql.internal.ast.tree.ParameterNode cannot be cast to 
    org.hibernate.hql.internal.ast.tree.SelectExpression 
    org.hibernate.hql.internal.ast.tree.CaseNode.getFirstThenNode(CaseNode.java:43) 

답변

3

따르고

은 ...

누군가가 이미 비슷한 문제 herehere을 올렸습니다. 티모에 따르면,이 버그는 또는의 최대 절전에 의해 부과 된 제한을 가정 해 봅시다 : 04-05이 : 그것은 00 55 :

우수 답변 2013-02-22T01에 티모 Westk ä mper에 의해 답변을 구문 적으로 가능하지만, 현재 Hibernate에 의해 지원되지 않는다.

쿼리() (고양이) .list에서 (cat.name.when ("밥". 여기에 관련 티켓 https://github.com/mysema/querydsl/issues/185

그래서, nithril에 의해 게시 된 솔루션이 실제로 나를 위해 작동입니다) .then (Expressions.numberTemplate (Long, "1")) 그렇지 않으면 (Expressions.numberTemplate (Long, "2"))));

내가 사용하여 종료 :이 경우 다른 사람에 도움이

JPAQuery query = new JPAQuery (this.em); 
    query.from(product) 
.where(product.name.eq("blah")) 
.listDistinct(ConstructorExpression.create(ProductDTO 
, product.name 
, product.modDate.when(product.creaDate) 
        .then(Expressions.booleanTemplate("true")) 
        .otherwise(Expressions.booleanTemplate("false")) 

))

희망 같은 문제가 있습니다.