错误:带有参数的“ $ 1” postgresql查询中或附近的语法错误

时间:2019-08-19 06:43:25

标签: java database postgresql jpa

在我的Java代码中,我有一个带参数的postgres查询,正在使用stringBuilder构建查询,然后使用createNativeQuery创建查询并填充参数。但是,如果我在gui中运行查询,它会给我预期的结果,但通过代码执行时却出错。我是Postgres的新手,已经看到了一些与我在查询中强制转换参数几乎相同的问题,但是我的查询中确实有IN参数,这是列表,我尝试了一些解决方案,但没有没有工作。

我收到以下错误消息:-> “错误”:“异常[EclipseLink-4002](Eclipse Persistence Services-2.5.1.v20130918-f2b9fc5):org.eclipse.persistence.exceptions.DatabaseException 内部异常:org.postgresql.util.PSQLException:错误:语法错误在“ $ 1”或附近   位置:249

        StringBuilder sb = new StringBuilder();
        sb.append(" SELECT comments.comment, mapping.user_id, 
        mapping.comment_id, mapping.comment_state, 
        mapping.created_at  FROM comments ").append(" comment 
        JOIN ").
        append(" user_comment_mapping  mapping ON 
        mapping.comment_id = comment.id WHERE 
        mapping.user_id IN ? AND mapping.comment_state = ? 
        ");

        final Query query = em.createNativeQuery(sb.toString());
        query.setParameter("1", userIds);
        query.setParameter("2", 
        2);

        List<Object[]> list = query.getResultList();

谢谢!

1 个答案:

答案 0 :(得分:2)

似乎您在参数持有人和姓名之间混在一起了,

如果您想使用holder:

    mapping.user_id IN ? AND mapping.comment_state = ? 

然后

query.setParameter(1, userIds);
query.setParameter(2, 2);

如果要使用名称:

    mapping.user_id IN :ids AND mapping.comment_state = :stat


query.setParameter("ids", userIds);
query.setParameter("stat", 2);