我有特定投影列表的 hibernate 标准:
criteria.setProjection(Projections.projectionList()
.add(Projections.property("contract.autoId"), "contractId")
.add(Projections.property("customer.firstName"), "firstName")
.add(Projections.property("contract.startDate"), "startDate")
.add(Projections.property("contract.endDate"), "endDate"));
我想将此条件的响应映射到以下 DTO 对象:
public class Contract {
private int contractId;
private String description;
private Date startDate;
private Date endDate;
}
此条件的响应类型:
因此,第一个对象具有Long 类型,但在 DTO 中 contractId 具有 int 类型。我无权更改此 dto 对象。< br/>
因此,当我将 ResultTransformer 添加到我的条件时:
criteria.setResultTransformer(Transformers.aliasToBean(Contract.class));
我遇到以下异常:
java.lang.IllegalArgumentException: argument type mismatch
是否可以告诉 Transformers.aliasToBean 将值从 Long 类型自动转换为 int?
最佳答案
您可以使用 addScalar
方法转换您的类型,该方法会负责将您的结果转换为预期类型。
但是 afaik,它只能通过 Native Query
来完成。因此,您必须首先将投影转换为查询,然后添加标量:
yourSession
.createSQLQuery("select autoId, firstName, startDate, endDate from ...")
.addScalar("contractId") //or you can specify the type with .addScalar("contractId", Hibernate.TheTypeYouWant)
引用:https://docs.jboss.org/hibernate/orm/4.2/devguide/en-US/html/ch13.html
关于java - Transformers.aliasToBean() 参数类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52536305/