在我的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();
谢谢!
答案 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);