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

Bas*_*ash 2 hibernate jpa jpql jpa-2.0

我是JPA的新手并且能够快速获得它,我一直在查询中使用"IN"运算符尝试选择查询,并且已经将错误视为关闭.我所做的是,我从函数中获取一系列(长)消息ID,并使用它来根据这些ID选择记录.这是我的查询

select t from MessageTable t where t.messageId IN (:id)  
query.setParameter("id", id);
Run Code Online (Sandbox Code Playgroud)

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

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

Mik*_*unu 7

当您想要检查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);
Run Code Online (Sandbox Code Playgroud)