是JPA的新手,并且能够快速获取它,我一直在尝试在查询中使用“ IN”运算符进行选择查询,并且一直在获取错误。我所做的是,我从一个函数中获取了一个(长)消息ID数组,并用它根据这些ID选择记录。这是我的查询
select t from MessageTable t where t.messageId IN (:id) query.setParameter("id", id);
我刚刚向您展示了部分代码,其中实体messageId为long,而在Oracle DB中为数字。当我尝试使用尽可能长的变量时,当我传递长数组时,它似乎不起作用。如果有人遇到这样的问题,有人可以帮忙。这是错误
14:24:49,428 INFO [LongType]无法将值’[J @ 14f76da’]绑定到参数:1; [无法将J强制转换为java.lang.Long
当要检查long / Long时,数组Long[]和long[]不是IN的有效参数类型-仅以下几种:
Long[]
long[]
Long
long
Collection<Long>
如果要坚持使用JPA而不使用Kshitij建议的org.Hibernate.Query.setParameterList,则必须将参数转换为Collections<Long>。
Collections<Long>
转换很容易完成,可以通过滚动或例如借助ArrayUtil来完成:
long[] id = {1L, 2L}; Long[] longs = ArrayUtils.toObject(id); Collection<Long> list = Arrays.asList(longs);