有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    toLong和其他类似的CriteriaBuilder方法不会创建新的表达式,也不会改变它们——它们用于强制转换,改变表达式的泛型类型。您的表达式仍然是b.avg(r.get(KpiSnapshot_uzvalue)),它仍然是一个双精度表达式

    如果需要的话,你的构造函数需要处理从Double到Long的转换