7
我目前正在使用queryDSL和hibernate的项目,其中它需要选择文字。下面的例子中张贴here我有:如何在QueryDSL中选择文字
createQuery().
from(path()).
where(specification().getPredicate()).
list(
ConstructorExpression.create(Foo.class, Expressions.constant(BigDecimal.ONE)));
其中Foo类有它接受一个BigDecimal构造。 当测试运行,我得到
org.hibernate.QueryException: Parameters are only supported in SELECT clauses when used as part of a INSERT INTO DML statement
at org.hibernate.hql.internal.ast.tree.SelectClause.initializeExplicitSelectClause(SelectClause.java:146)
此更改为:
createQuery()
.from(path()).
where(specification().getPredicate())
.list(
ConstructorExpression.create(Foo.class, NumberTemplate.create(BigDecimal.class, "1.0")));
产生不同的堆栈跟踪:
java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at com.mysema.query.types.ConstructorExpression.newInstance(ConstructorExpression.java:133)
at com.mysema.query.jpa.FactoryExpressionTransformer.transformTuple(FactoryExpressionTransformer.java:50)
我试图改变Foo类的构造函数接受整数和为了测试而修改为使用Integer的查询并且它确实产生了正确的查询:
createQuery()
.from(path()).
where(specification().getPredicate())
.list(ConstructorExpression.create(LevelBoundary.class, NumberTemplate.create(Integer.class, "1")));
是使用NumberTemplate正确的方式来选择BigDecimal的文字? NumberTemplate文档指定T扩展Number和Comparable,但在非Integer类型上失败。我如何正确选择querydsl中的常量/文字?
我有同样的异常,也可以通过使用NumberTemplate.create解决它(Long.class,“1”),而不是表达式.constant(1L) – Stephane 2014-10-28 06:27:07
我的完整声明:QRolloutMeta qRolloutMeta = new QRolloutMeta(qRollout,NumberTemplate.create(Long.class,qBTS.count()。toString()),NumberTemplate.create(Integer.class,btsNbPlanned.toString )),NumberTemplate.create(Integer.class,btsNbCompleted.toString()),NumberTemplate.create(Integer.class,btsPercentage.toString())); \t \t列表 resultList = query.distinct()列表(qRolloutMeta)。 –
Stephane
2014-10-28 06:52:07
嗨Stephane,我可以证实,这确实适用于整型或长类型的作品,但不适用于BigDecimal(在OP代码的第三块样本) – geneqew 2014-10-28 11:59:52