У меня есть собственный запрос, и я хочу преобразовать столбцы (b_id
, b_code
, b_desc
) в complexProperty
(настраиваемый объект) в ResultDto
.
SQL
select a.id as id,
a.name as name,
b.id as b_id,
b.code as b_code,
b.desc as b_desc
from a
left join b
on a.id = b.a_id;
ResultDto.class
public class ResultDto {
private String id;
private String name;
private ComplexPropertyDto complexProperty;
// other fields and getter|setter
}
ComplexPropertyDto.class
public class ComplexPropertyDto {
private String id;
private String code;
private String desc;
// other fields and getter|setter
}
Я пытаюсь использовать псевдоним столбца, например complexProperty.code
, и трансформатор addScalar("complexProperty.code", StringType.INSTANCE)
. Но я получил org.hibernate.PropertyNotFoundException: Could not resolve PropertyAccess for complexProperty.code on class xxx.ResultDto
.
Обновить
Как преобразовать столбцы в таблице b
в свойство complexProperty
в ResultDto.class
(работать как аннотация Embedded
).
addScalar
таким образом. Вы можете создать конструктор дляResultDto
, а затем сопоставить результаты с помощью аннотации@SqlResultSetMapping
. См., Например, это - person SternK   schedule 17.12.2020ResultTransformer
, как он объяснил здесь. Какая именно часть вашего запроса может быть изменена динамически? Одинаков ли результат для всех возможных комбинаций? - person SternK   schedule 17.12.2020setResultTransformer( Transformers.aliasToBean( ResultDto.class ) )
, а получилorg.hibernate.PropertyNotFoundException
из-заaddScalar(xxx)
. - person 西门吹雪   schedule 18.12.2020AliasToBeanResultTransformer
и написал собственную реализацию на основе его метода. - person 西门吹雪   schedule 21.12.2020