我们使用 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
属性在财务实体上属于 double 类型(不是我的决定)。