Этот запрос здесь в основном работает так, как задумано:
@Query("SELECT " +
" votedItem.groupVoting.id AS votingId, " +
" COUNT(votedItem) AS nbVotes " +
"FROM VotingVotedItemEntity votedItem " +
"WHERE votedItem.id IN :votingIds " +
"GROUP BY votedItem.id, votedItem.item.id")
List<Object> findItemVoteCountsByVotingIds(@Param("votingIds") List<Long> votingIds);
Моя проблема в том, что я не могу передать результат в объект. Запрос не окончательный, но, в конце концов, он должен быть отображен в класс:
public class ItemVotes
{
private String name;
private Integer voteCount;
/* Getter & setter */
}
Я не знаю, куда идти. На этом этапе я думаю, что мне придется создать собственный JpaRepository:
public interface VoteCountsRepository extends JpaRepository<ItemVotes, Long> {
}
но это не работает, поскольку сервер умирает при запуске в
IllegalArgumentException: Not a managed type
Может ли кто-нибудь объяснить мне, как здесь отображать пользовательские типы в объекты?





Вы должны уметь что-то делать нравится:
@Query("SELECT " +
" new package.of.class.ItemVotes(votedItem.groupVoting.id AS votingId, " +
" COUNT(votedItem) AS nbVotes) " +
"FROM VotingVotedItemEntity votedItem " +
"WHERE votedItem.id IN :votingIds " +
"GROUP BY votedItem.id, votedItem.item.id")
List<ItemVotes> findItemVoteCountsByVotingIds(@Param("votingIds") List<Long> votingIds);
Вызывается Выражение конструктора JPQL.
Он будет работать где угодно. Я думаю, вы, вероятно, захотите поместить его в свой VotedItemRepository, поскольку эти данные указывают на количество проголосованных пунктов ...
Хм. Ладно, похоже, это работает, и нет более лучшего способа, чем этот? Это действительно заставляет меня задуматься, почему я использую ORM, если мне нужно писать запросы, которые выглядят так: D
Вы можете написать свой собственный Запрос гибернации. Но для того, что вы делаете, это определенно самый чистый способ сделать это. IMHO вам не нужно было резко менять запрос, и он все еще намного чище, чем написание собственного запроса, выполнение соединений и создание некоторого отображения гибернации или тому подобное.
Но нужен ли для этого собственный
JpaRepository<ItemVotes, Long>или он должен работать где угодно?