【问题标题】:mapping pojo on JPA query在 JPA 查询上映射 pojo
【发布时间】:2020-03-26 03:30:25
【问题描述】:

假设我有一个关于 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

知道如何解决这个问题吗?

【问题讨论】:

标签: java sql spring spring-data jpql


【解决方案1】:

new 语法适用于 jpql,而不适用于 sql。您不能将它与nativeQuery 一起使用。你必须这样做:

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

【讨论】:

    猜你喜欢
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 2017-01-02
    • 1970-01-01
    • 2018-09-11
    • 2013-05-08
    相关资源
    最近更新 更多