2

我是 JPA 的新手并且能够快速获得它,我一直在尝试在查询中使用“IN”运算符进行选择查询,并且一直将错误视为错误。我所做的是,我从一个函数中获取一组(长)消息 ID,并使用它来根据这些 ID 选择记录。这是我的查询

select t from MessageTable t where t.messageId IN (:id)  
query.setParameter("id", id);

我刚刚向您展示了部分代码,实体中的 messageId 很长,而在 Oracle DB 中它的编号。当我尝试与它一样长的变量时,它似乎在我传递长数组时不起作用。如果有人遇到这样的问题,可以有人帮忙。这是错误

14:24:49,428 INFO [LongType] 无法将值“[J@14f76da”绑定到参数:1;[J 不能强制转换为 java.lang.Long

4

2 回答 2

7

当您想要检查 long/Long 时,数组Long[]和不是 IN 的有效参数类型 - 仅以下是:long[]

  • Long
  • long
  • Collection<Long>(collection_valued_input_parameter)

如果您想坚持使用 JPA 而不是使用Kshitij建议的 org.Hibernate.Query.setParameterList,则必须将参数转换为Collections<Long>.

转换很容易完成,可以通过自己滚动或例如在ArrayUtil的帮助下完成:

long[] id = {1L, 2L};
Long[] longs = ArrayUtils.toObject(id);
Collection<Long> list = Arrays.asList(longs);
于 2012-05-21T18:41:26.640 回答
2

尝试这个:

query.setParameterList("id", ids);
于 2012-05-21T09:39:01.857 回答