【问题标题】:How to set Array in StoredProcedureQuery..setParameter()?如何在 StoredProcedureQuery..setParameter() 中设置数组?
【发布时间】:2021-04-06 04:31:37
【问题描述】:

有这样一段代码:

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: Type cannot be null 被抛出

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

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

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

内部转换失败:[512]

如何将列表传递给参数?

【问题讨论】:

    标签: java oracle hibernate stored-procedures java-stored-procedures


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答!但我不明白我应该如何将自定义 UserType 用于 StoredProcedureQuery。我的程序什么也不返回,我也没有实体。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    • 2015-09-23
    相关资源
    最近更新 更多