一尘不染

JPA-在IN运算符中使用长数组会引发强制转换异常

hibernate

是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


阅读 299

收藏
2020-06-20

共1个答案

一尘不染

当要检查long / Long时,数组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);
2020-06-20