2015-11-05 109 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'"); 
相关问题