当前位置: 首页 > 面试题库 >

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

司空鸿熙
2023-03-14
问题内容

是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
  • 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);


 类似资料:
  • 我刚才向您展示了部分代码,在实体中messageId是长的,而在Oracle DB中它的编号是长的。当我尝试和long变量一样工作时,当我传递long数组时,它似乎就不工作了。如果有人遇到这样的问题,总有人能帮上忙。这就是错误所在 14:24:49,428信息[LongType]无法将值“[J@14F76DA”绑定到参数:1;[J不能强制转换为java.lang.Long

  • 我试图运行一个复杂的JPQL查询,它不会抛出异常,而且工作起来很奇怪。 下面是我的问题 编辑:这是我的新JPA查询,我给它一个集合,而不是一些硬编码的值 我仍然得到同样的例外

  • C++ 运算符 强制转换运算符是一种特殊的运算符,它把一种数据类型转换为另一种数据类型。强制转换运算符是一元运算符,它的优先级与其他一元运算符相同。 大多数的 C++ 编译器都支持大部分通用的强制转换运算符: (type) expression 其中,type 是转换后的数据类型。下面列出了 C++ 支持的其他几种强制转换运算符: const_cast<type> (expr): const

  • JLS说 编辑:如果操作数已经使用转换运算符转换为不同的(较小的)类型,那么操作数是否经历数字提升(一元/二进制)?如果是这种情况,您将如何解释具有字节变量的表达式,因为在强制转换之后,字节结果可能会根据数字提升转换为int?

  • 问题内容: 我有和数组两个值,我想在选择查询中将它与sql IN运算符一起使用。 这是我桌子的结构 我有两个值的数组 我想获取comp_id 1和comp_id 2的记录。因此,我编写了以下查询。 但是它不会返回结果。 问题答案: 由于您拥有普通 整数 就可以做到… (由于不断出现,一些其他信息…) 如果使用 字符串 (特别是 不受信任的 )输入,可以做到 但不能处理NULL之类的值。并会添加引号

  • 方言设置为java,我的drools版本是6.4.0。我如何避免这个错误? 编辑:字符串到int: