java JPA构造寻找错误的构造函数
我们试图使用JPAs construct()
API将数据映射到我们的对象中,但不幸的是,它似乎忽略了类型转换:
CriteriaBuilder cb = this.entityManager.getCriteriaBuilder();
CriteriaQuery<ReportDto> q = cb.createQuery(ReportDto.class);
q.select(cb.construct(DailyReportDto.class, r.get(createdYear),
r.get(KpiSnapshot_.createdDay),
cb.toLong(cb.avg(r.get(KpiSnapshot_.value)))));
结果如下:
java.lang.NoSuchMethodException: DailyReportDto.<init>(java.lang.Integer, java.lang.Integer, java.lang.Double)
这对我来说毫无意义,因为toLong
应该可以阻止它寻找替身,不是吗
# 1 楼答案
toLong和其他类似的CriteriaBuilder方法不会创建新的表达式,也不会改变它们——它们用于强制转换,改变表达式的泛型类型。您的表达式仍然是b.avg(r.get(KpiSnapshot_uzvalue)),它仍然是一个双精度表达式
如果需要的话,你的构造函数需要处理从Double到Long的转换