Şu anda selectDSral'ı gerektiren bir arama sorgusu olan ve bir hazır bilgi kaynağı olan bir projede çalışıyorum. örnekler here yayınlanmıştır takiben i vardır:QueryDSL'deki hazır şablonları seçme
Foo sınıfı BigDecimal kabul eden bir kurucu sahipcreateQuery().
from(path()).
where(specification().getPredicate()).
list(
ConstructorExpression.create(Foo.class, Expressions.constant(BigDecimal.ONE)));
. testinde bu çalıştırırken, ben bu değişen
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)
olsun:
createQuery()
.from(path()).
where(specification().getPredicate())
.list(
ConstructorExpression.create(Foo.class, NumberTemplate.create(BigDecimal.class, "1.0")));
farklı stacktrace üretir:
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)
Ben Tamsayı kabul etmek Foo sınıfı yapıcısı değişen çalıştı ve Sorgu, sınama için de tamsayı kullanmak için değiştirildi ve doğru sorguyu verdi:
createQuery()
.from(path()).
where(specification().getPredicate())
.list(ConstructorExpression.create(LevelBoundary.class, NumberTemplate.create(Integer.class, "1")));
NumberTemplate kullanarak BigDecimal literals seçmek için doğru yolu? NumberTemplate belgeleri, T genişletme Numarası ve Karşılaştırılabilir'i belirtir, ancak Tam olmayan türlerde başarısız olur. Queryds'ta sabitleri/değişmezleri nasıl düzgün seçerim?
: Benim kod
, bu benzer bir kod ile çalışır Expressions.constant (1L) – Stephane
Tüm ifadem: QRolloutMeta qRolloutMeta = yeni 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 Liste sonuçList = query.distinct() liste (qRolloutMeta); –
Stephane
Merhaba Stephane, Bunun gerçekten tamsayı veya Uzun tip çalışmalar için çalıştığını ancak BigDecimal için değil (OP kodunun 3. bloğundaki örnek) – geneqew