Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate JPA-在in运算符中使用长数组引发强制转换异常_Hibernate_Jpa_Jpa 2.0_Jpql - Fatal编程技术网

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

Hibernate JPA-在in运算符中使用长数组引发强制转换异常,hibernate,jpa,jpa-2.0,jpql,Hibernate,Jpa,Jpa 2.0,Jpql,我是JPA新手,能够很快得到它,我在查询中使用“IN”操作符尝试了一个select查询,并得到了错误信息。我要做的是,我从一个函数中获取一个(长)消息ID数组,并使用它根据这些ID选择记录。这是我的问题 select t from MessageTable t where t.messageId IN (:id) query.setParameter("id", id); 我刚才向您展示了部分代码,在实体中messageId很长,在oracledb中是它的编号。当我像长变量一样尝试时,当我

我是JPA新手,能够很快得到它,我在查询中使用“IN”操作符尝试了一个select查询,并得到了错误信息。我要做的是,我从一个函数中获取一个(长)消息ID数组,并使用它根据这些ID选择记录。这是我的问题

select t from MessageTable t where t.messageId IN (:id)  
query.setParameter("id", id);
我刚才向您展示了部分代码,在实体中messageId很长,在oracledb中是它的编号。当我像长变量一样尝试时,当我传递长数组时,它似乎不起作用。如果有人遇到这样的问题,有人能帮上忙。这就是错误所在

14:24:49428信息[LongType]无法绑定值'[J@14f76da”“对 参数:1;[J不能转换为java.lang.Long

试试这个:

query.setParameterList("id", ids);

当您要对照Long/Long进行检查时,数组
Long[]
Long[]
不是IN的有效参数类型-只有以下参数:

  • Long
  • long
  • Collection
    (Collection\u value\u input\u参数)
如果您想坚持使用JPA而不使用Kshitij建议的方法,则必须将参数转换为
集合

转换很容易完成,您可以自己滚动,也可以借助以下工具进行:

long[]id={1L,2L};
Long[]longs=ArrayUtils.toObject(id);
集合列表=Arrays.asList(longs);

谢谢,我不得不将其作为列表。API允许您传递集合,因此它将处理集合和其他集合子类型,而不仅仅是列表
long[] id = {1L, 2L};
Long[] longs = ArrayUtils.toObject(id);
Collection<Long> list = Arrays.asList(longs);