【发布时间】:2012-09-26 09:06:07
【问题描述】:
我们使用 JPA 和 hibernate 作为实现。假设我有以下 DTO:
public class SupplierInfoDto{
private String supplierName;
private BigDecimal remainingFinances;
public SupplierInfoDto(String supplierName, BigDecimal remainingFinances){
this.supplierName = supplierName;
this.remainingFinances = remainingFinances;
}
// getters / setters
}
我似乎无法休眠以正确找到此构造函数。我首先尝试了以下查询(模型比这更复杂,我最终需要获取一些聚合(不是直接在实体上),这就是为什么我要获取 DTO 而不是实体):
SELECT NEW com.company.dto.SupplierInfoDto(s.name, f.remaining)
FROM Supplier s INNER JOIN Finances f
WHERE s.id = :SupplierId
但是,我得到了 org.hibernate.hql.ast.QuerySyntaxException: Unable to locate appropriate constructor on class 异常。
我从中选择的 remaining 列在 MSSQL 中存储为浮点数(我知道,我知道钱永远不应该存储为浮点数,但这是一个现有系统,我不能只更改此数据类型)..
作为测试,我尝试了以下查询,但有与上述相同的异常:
SELECT NEW com.company.dto.SupplierInfoDto(s.name, NEW java.math.BigDecimal(10))
FROM Supplier s
WHERE s.id = :SupplierId
所以我的问题是:如何让 hibernate/JPA 为上述两个查询找到合适的构造函数?
更新:remaining 属性在 Finances 实体上属于 double 类型(不是我的决定)。
【问题讨论】:
-
剩余的Finance字段/列是什么类型?
-
你可以尝试包含一个默认构造函数吗?
-
@SatheeshKC 我可以,但我认为这行不通,因为休眠可能无法确定哪个构造函数参数属于哪个 getter/setter 对。如果我添加一个没有 BigDecimal 参数的构造函数,并从查询中删除该参数,它就可以正常工作。所以我认为这是一个类型问题。
标签: java hibernate jpa hql jpql