отображение pojo по запросу JPA - PullRequest
0 голосов
/ 26 марта 2020

Предположим, у меня есть запрос на jpa, например

@Query(
        value = "SELECT user_no, count(*) " +
                "FROM users " +
                "where status = 'VCS' group by user_task_no",
        nativeQuery = true
)
List<Object> getUsers();

Теперь я могу получить результат, подобный

[
    [
        100,
        2
    ],
    [
        200,
        2
    ],
    [
        300,
        3
    ]
]

Однако я хочу, чтобы результат был

[
    {
        "user_no": 100,
        "count": 2
    },
    {
        "user_no": 200,
        "count": 2
    },
    {
        "user_no": 300,
        "count": 3
    }
]

Я пытался создать класс вроде

public class UserCount {
    private Long userNo;
    private Long count;

    public UserCount(Long userNo, Long count) {
        this.userNo = userNo;
        this.count = count;
    }
}

и сделать его

@Query(
        value = "SELECT new fullpackage.UserCount(user_no, count(*)) " +
                "FROM users " +
                "where status = 'VCS' group by user_task_no",
        nativeQuery = true
)
List<UserCount> getUsers();

Однако я получаю сообщение об ошибке

syntax error at or near "." ...
could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet

любая идея как я могу это исправить?

1 Ответ

1 голос
/ 26 марта 2020

Синтаксис new работает на jpql, а не на sql. Вы не можете использовать его с nativeQuery. Вы должны сделать что-то вроде этого:

@Query(
        "SELECT new fullpackage.UserCount(userTaskNo, count(*)) " +
        "FROM Users " +
        "where status = 'VCS' group by userTaskNo"
)
List<UserCount> getUsers();
...