首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Transformers.aliasToBean()参数类型不匹配

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

Stack Overflow用户
提问于 2018-09-27 11:48:04
回答 1查看 1.5K关注 0票数 4

我有hibernate标准和特定的投影列表:

代码语言:javascript
复制
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对象:

代码语言:javascript
复制
public class Contract {
    private int contractId;
    private String description;
    private Date startDate;
    private Date endDate;
}

对这一标准的反应类型:

所以,第一个对象有类型,但是在DTO中,contractId有int类型,我没有权限将这个dto更改为对象。

因此,当我将ResultTransformer添加到我的标准中时:

代码语言:javascript
复制
criteria.setResultTransformer(Transformers.aliasToBean(Contract.class));

我有以下例外:

代码语言:javascript
复制
java.lang.IllegalArgumentException: argument type mismatch

可以对Transformers.aliasToBean说,自动将长类型的值转换为int吗?

EN

回答 1

Stack Overflow用户

发布于 2018-09-27 12:12:42

您可以通过使用addScalar方法来转换您的类型,该方法负责将结果转换为预期的类型。但是afaik,它只能用Native Query来完成。因此,首先必须将投影转换为查询,然后添加标量:

代码语言:javascript
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52536305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档