我有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;
}对这一标准的反应类型:

所以,第一个对象有类型,但是在DTO中,contractId有int类型,我没有权限将这个dto更改为对象。
因此,当我将ResultTransformer添加到我的标准中时:
criteria.setResultTransformer(Transformers.aliasToBean(Contract.class));我有以下例外:
java.lang.IllegalArgumentException: argument type mismatch可以对Transformers.aliasToBean说,自动将长类型的值转换为int吗?
发布于 2018-09-27 12:12:42
您可以通过使用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
https://stackoverflow.com/questions/52536305
复制相似问题