Transformers.aliasToBean () несоответствие типов аргументов - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть критерии гибернации с определенным списком проекций:

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 type.I не имеет права изменять этот объект dto.
Итак, когда я добавил ResultTransformer к моим критериям:

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

Я получил следующее исключение:

java.lang.IllegalArgumentException: argument type mismatch

Можно ли сказать Transformers.aliasToBean для автоматического преобразования значения из типа Long в тип int?

1 Ответ

0 голосов
/ 27 сентября 2018

Вы можете преобразовать свой тип с помощью метода addScalar, который позаботится о преобразовании вашего результата в ожидаемый тип.Но, на самом деле, это можно сделать только с 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...