2015-11-05 45 views
2

我使用QueryDSL構建查詢。結果必須注入一個對象內。第一列是groupBy,第二列是值,第三列是常數。讓QueryDSL的構造函數使用常量而不是參數

常數是一個問題,因爲QueryDSL要使它成爲一個參數,從而導致這個錯誤從休眠:「1」

org.hibernate.QueryException: 
    Parameters are only supported in SELECT clauses when used as part of a INSERT INTO DML statement 
    [select event.datetime, count(event), ?1] 

上面應該直接常量字符串「TOTAL」。

這裏是我的代碼:

final Expression<String> TOTAL = Expressions.constant("total"); 
final StringExpression date = Expressions.stringTemplate("DATE_FORMAT({0},'%Y-%m-%d')", event.datetime); 

query.select(Projections.constructor(Stat2DGraphDto.class, date, event.count(), TOTAL)) 
query.from(event).groupBy(date); 
query.fetch(); 

如果我從構造函數中刪除TOTAL,它按預期工作,但我需要這個常量後,製備UNION。

我可以強制QueryDSL發送字符串嗎?

回答

1

我會回答我自己的問題。

QueryDSL的開發者回答了這個問題,這是Hibernate中的一個錯誤,他們不能/不會在QueryDSL中修復它。我找到的解決方案是使用帶有引用字符串的stringTemplate

final Expression<String> TOTAL = Expressions.stringTemplate("'total'"); 
相關問題