0

我收到以下错误:“com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的 SQL 语法有错误;请查看与您的 MariaDB 服务器版本相对应的手册,以了解在 'Card.findPrefix' 附近使用的正确语法”

for:

    @NamedNativeQueries({
        @NamedNativeQuery(name = "Card.findPrefix",
                query = "SELECT DISTINCT(FLOOR(c

    .number/10000)) FROM Card c")
    })

    public List<Integer> findPrefix(){
            Query q = em.createNativeQuery("Card.findPrefix");
            try{
                return q.getResultList();
            }catch(Exception ex){
                ex.printStackTrace();
                return null;
            }
        }

我不明白我的错误在哪里,因为当我将这个查询直接输入到 Mysql 时,它工作得很好。

4

2 回答 2

2

使用应该使用 createNamedQuery,而不是 createNativeQuery。

来自EntityManager JavaDoc

createNativeQuery(String sqlString)

创建 Query 实例以执行本机 SQL 语句,例如更新或删除。

createNamedQuery(字符串名称)

创建 Query 实例以执行命名查询(在 Java Persistence 查询语言或本机 SQL 中)。

因此,在您的代码中,您正在执行查询名称 'Find....' 作为 SQL 查询。

正确的那一个:

Query q = em.createNamedQuery("Card.findPrefix");
于 2016-06-23T11:33:52.287 回答
0

最终代码是:

public List<Integer> findPrefix(){
        Query q = em.createNamedQuery("Card.findPrefix");
        List<Integer> res = new ArrayList<Integer>();
        for(Object row : (List<Object>) q.getResultList()){
            res.add(((BigInteger)row).intValue());
        }
        return res;
    }
    @NamedNativeQueries({
    @NamedNativeQuery(name = "Card.findPrefix",
            query = "SELECT DISTINCT(FLOOR(c.number/10000)) FROM Card c")
})
于 2016-06-23T12:01:21.950 回答