有这样一个代码:
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)));
对于eclipselink,成功地执行了以下代码:注册一个参数以传递id列表,然后设置该列表。在hibernate情况下,类型为的异常:
java.lang.illegalargumentexception:引发类型不能为null
据我所知,heber不喜欢中的array.class query.registerStoredProcedureParameter ("list_of_ids", Array.class, ParameterMode.IN);
我试着把这部分改成 Integer []. Class
以及 ArrayList.class
,但这会导致其他错误,例如:
绑定值[oracle.sql。array@5f82399f]不是指定的类型[class[ljava.lang.integer;
或
内部转换失败:[512]
如何将列表传递给参数?
1条答案
按热度按时间5hcedyr01#
hibernate不能很好地处理sql数组。你必须创建一个
UserType
而使用它。在这篇文章的最后是一个创建UserType
对于postgres数组。同样的事情也应该适用于甲骨文。https://thorben-janssen.com/mapping-arrays-with-hibernate/