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

标签 java hibernate criteria

我有特定投影列表的 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;
}

此条件的响应类型:
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?

最佳答案

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

相关文章:

java - 使用hibernate 4和spring 3.x批量插入记录

java - 我的自定义订单按条件查询/jpql

java - JPA/hibernate : CriteriaBuilder - How to create query using relationship object?

java - java中Comparator中super的使用

java - Hibernate 添加具有子实体 ID 的实体

mysql - 在 Hibernate 中查询

hibernate - 如何使用 Hibernate 条件查询一个月的日期

java - 在android中设置多个微调器

点击 jsp 时出现 java.lang.NoClassDefFoundError

java - @TransactionConfiguration(transactionManager ="txManager")NoSuchBeanDefinitionException : No bean named 'txManager' is defined