如何使用Querydsl将countDistinct除以countDistinct转换为Double

时间:2017-09-04 22:26:19

标签: mysql jpa querydsl

我正在使用Querydsl JPA(4.1.4)查询多个字段,它是一个基于我生成查询的参数的动态API。

当我选择metric为field.avg()时,它返回Double,当我选择field.count()时,它返回Long,这很好,但是当我的表达式有两个Longs的除法时,它返回一个Long值,甚至虽然DB返回的值是一个浮点值。

有没有办法告诉Querydsl应该将值检索为double?我已经尝试使用.doubleValue().castToNum(Double.class)但是在MySQL上它会返回一个无效的强制转换异常。

示例代码:

NumberExpression metric = field1.countDistinct().divide(field2.countDistinct());
List<Tuple> tuples = query.select(key, metric)...;
tuples.forEach(tuple -> tuple.get(1, Number.class));

我也尝试了这个没有成功,它仍然返回Long:

Expressions.numberTemplate(Double.class, "{0} / {1}", field1.countDistinct(), field2.countDistinct());

field1.countDistinct().doubleValue().divide(field2.countDistinct())

抛出

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'double precision) as col_2_0_...

但使用floatValue工作

field1.countDistinct().floatValue().divide(field2.countDistinct())

0 个答案:

没有答案