微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 StoredProcedureQuery..setParameter() 中设置数组?

如何解决如何在 StoredProcedureQuery..setParameter() 中设置数组?

有这样一段代码

StoredProcedureQuery query = this.em.createStoredProcedureQuery ("NameOfProcedure");
query.registerStoredProcedureParameter ("list_of_ids",Array.class,ParameterMode.IN);
query.setParameter (Parameters.PIECE_IDS,oracleArray (dataSource,"T_NUMBER_LIST",request.getItems (). toArray (items)));

对于eclipslink,这段代码执行成功:注册一个参数传递id列表,然后设置这个列表。在 Hibernate 的情况下,以下类型的异常:

java.lang.IllegalArgumentException:抛出类型不能为空

据我了解,Heber 不喜欢 Array.class query.registerStoredProcedureParameter ("list_of_ids",ParameterMode.IN);

我尝试将此部分修复为 Integer []. ClassArrayList.class,但这会导致其他错误,例如:

绑定值 [oracle.sql.ARRAY@5f82399f] 不是指定的类型 [class [Ljava.lang.Integer;

内部转换失败:[512]

如何将列表传递给参数?

解决方法

Hibernate 不能很好地处理 SQL 数组。您必须为数组创建一个 UserType 并使用它。这篇文章的最后是一个为 Postgres 数组创建 UserType 的例子。同样的事情应该适用于 Oracle。

https://thorben-janssen.com/mapping-arrays-with-hibernate/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。