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

2024-02-19

我是 JPA 新手,能够快速获取它,我一直在查询中使用“IN”运算符尝试选择查询,并且一直收到错误信息。我所做的是,我从函数中获取一组(长)消息 id,然后使用它根据这些 id 选择记录。这是我的查询

select t from MessageTable t where t.messageId IN (:id)  
query.setParameter("id", id);

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

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


Arrays Long[] and long[]当您想要检查 long/Long 时,这些参数不是 IN 的有效参数类型 - 仅以下内容:

  • Long
  • long and
  • Collection<Long>(集合值输入参数)

如果你想坚持使用 JPA 而不是使用org.Hibernate.Query.setParameterList http://docs.jboss.org/hibernate/orm/3.6/javadocs/org/hibernate/Query.html#setParameterList%28java.lang.String,%20java.util.Collection%29Kshitij建议,你必须将你的论点转换为Collections<Long>.

转换很容易完成,可以通过自己进行转换,也可以在以下工具的帮助下完成:数组工具 http://commons.apache.org/lang/api-2.5/org/apache/commons/lang/ArrayUtils.html#toObject%28long%5B%5D%29:

long[] id = {1L, 2L};
Long[] longs = ArrayUtils.toObject(id);
Collection<Long> list = Arrays.asList(longs);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐