Нет, это не совсем возможно.Запрос Criteria может возвращать только сущности, массивы скаляров или объекты-значения, построенные из скаляров (используя ResultTransformer
).
Вы можете вернуть список HumanWithSalutation
объектов, которые будут содержать те же поля, что и Человек + дополнительное приветствие, но это будут объекты значения, а не постоянные объекты: любые изменения, внесенные в эти объектыне будет сделан постоянным для базы данных, как это было бы с человеческими экземплярами.
Для этого создайте класс:
public class HumanWithSalutation extends Human {
private String salutation;
// getter and setter
}
Назначьте ему AliasToBeanResultTransformer
(который будет заполнять всеваши HumanWithSalutation
объекты, использующие сеттеры), и убедитесь, что у критерия есть список проекций, возвращающий все поля человека + приветствие (псевдоним "приветствие"):
ProjectionList projectionList = Projections.projectionList();
projectionList.add(Projections.property("id");
projectionList.add(Projections.property("name");
projectionList.add(Projections.property("gender");
projectionList.add(Projections.alias(Projections.sqlProjection(...), "salutation"));
criteria.setProjection(projectionList);
Если вы не хотитеВ проекции SQL вы можете реализовать преобразование в Java в методе getSalutation()
(и удалить установщик).