我是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
答案 0 :(得分:7)
当你想要检查长/长时,数组Long[]
和long[]
不是IN的有效参数类型 - 只有以下是:
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);
答案 1 :(得分:2)
试试这个:
query.setParameterList("id", ids);