Transformers.aliasToBean()参数类型不匹配

时间:2018-09-27 11:48:05

标签: java hibernate criteria

我有带有特定投影列表的休眠条件:

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;
}

对此标准的响应类型:
enter image description here
因此,第一个对象的类型为 Long ,但是在DTO中, contractId 的类型为 int 。我无权更改此dto对象。 br /> 因此,当我将 ResultTransformer 添加到我的条件中时:

criteria.setResultTransformer(Transformers.aliasToBean(Contract.class));

我遇到以下异常:

java.lang.IllegalArgumentException: argument type mismatch

是否可以对 Transformers.aliasToBean 说自动将值从Long类型转换为int?

1 个答案:

答案 0 :(得分:1)

您可以使用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

相关问题