Мне не удалось найти какие-либо конкретные решения:
У меня есть собственный запрос в Spring Data, и мне нужно сопоставить набор результатов с пользовательским объектом EJB.
@Query(query = "select id as activityId, activity_title as activityTitle,
activity_instructions as activityInstructions from activities_t " +
"where case when activity_code ~ '^\\d+$' " + // Digits only
" then cast(activity_code as int) between :firstId and :lastActivityId end",
resultSetMapping="myQueryResultSet",
name = "myQuery")
public List<Activity> findActivities(@Param("firstId") int firstId, @Param("lastId") int lastId);
Проблема в том, что для этого нужно вернуть пользовательский объект Activity
, а не объект @Entity ActivitiesT
.
Activity
- это пользовательский POJO, который имеет подмножество полей ActivitiesT
, , а некоторые столбцы имеют несколько другое имя :
Activity.java, 3 поля с геттерами / сеттерами
activityId (ACTIVITIES_T.ID) <-- this is differently-named
activityTitle (ACTIVITIES_T.ACTIVITY_TITLE) <-- same name
activityInstructions (ACTIVITIES_T.ACTIVITY_INSTRUCTIONS) <-- same name
Я нашел здесь одно решение, но оно не работает для меня, потому что у меня псевдоним с другим именем:
Spring Data JPA отображает собственный результат запроса в не-Entity POJO
Их решение заключается в использовании
@SqlResultSetMapping(
name="groupDetailsMapping",
classes={
@ConstructorResult(
targetClass=GroupDetails.class,
columns={
@ColumnResult(name="GROUP_ID"),
@ColumnResult(name="USER_ID")
}
)
}
)
В ответ они предполагают, что все столбцы в пользовательском POJO названы так же, как и в ожидаемом объекте @Entity. Для меня это не так. Кроме того, я не могу поместить SqlResultSetMapping в мой метод репозитория Spring Data JPA.
Какие-нибудь решения для этого?