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

如何从休眠中调用存储过程,将自定义数据库类型作为参数?

如何解决如何从休眠中调用存储过程,将自定义数据库类型作为参数?

我阅读了数十个问题、javadoc、教程、无数帖子,但我仍然不知道如何做到这一点。

动机:我们需要将实体列表传递给数据库以执行一些优化的东西。这不是重点和问题。为此,我们可能没有比调用一些存储过程更好的方法,我们将保存数据的 POJO 数组传递到其中。数据库专家说,如果我们可以将一些自定义数据类型传递到该过程中,那么最好这样做。所以我们开始。 (请不要提供不同的解决方案作为解决方案,因为问题本身是关于映射自定义类型的;我想听到更好的解决方案,但我想知道这个问题的答案)

我们的测试结构

表格:

CREATE TABLE SCH.test_table(id varchar2(50),a varchar2(50),b varchar2(50));

类型:

CREATE OR REPLACE TYPE SCH.PROC_TEST_TYPE AS OBJECT
(
  a varchar2(50),b varchar2(50)
)

CREATE OR REPLACE TYPE SCH.PROC_TEST_TYPE_LIST AS TABLE OF  PROC_TEST_TYPE;

包含非常特殊操作的存储过程,这里用insert into伪造:

CREATE OR REPLACE PROCEDURE SCH.PROC_TEST (
      param IN SCH.PROC_TEST_TYPE_LIST)
   AS      
   BEGIN
      FORALL i IN 1 .. param.COUNT          
         INSERT INTO SCH.test_table
              VALUES (
                      '',param (i).a,param (i).b);   
   END PROC_TEST;

可以这样调用

CALL SCH.proc_test(SCH.PROC_TEST_TYPE_LIST(SCH.PROC_TEST_TYPE('aaa','bbb'),SCH.PROC_TEST_TYPE('ccc','ddd')));

它“有效”。现在如何从休眠中调用它???

来自java代码的存储过程引用:

@NamedStoredProcedureQuery(
        name = "procTest",procedureName = "sch.proc_test",parameters = {
                @StoredProcedureParameter(mode = ParameterMode.IN,type = String.class,name = "a")
        }
)

到这里我就结束了。实际上,我试图通过单个 SCH.PROC_TEST_TYPE 并且我什至没有做到。我试图将它作为字符串 PROC_TEST_TYPE('aaa','bbb') 传递,我试图实现 UserType 并传递那个( https://discourse.hibernate.org/t/mapping-custom-column-type-with-postgresql-and-hibernate/1904/8 ),但没有运气。

这应该是可能的,即如果有无数的遗留数据库。因此,如果有一些带有给定存储过程的数据库,我如何从 spring/hibernate 调用它?

我也发现了这个,这看起来很有希望:Java - How to call an oracle procedure with custom types? 但我不知道如何使用 hibernate 在应用程序中执行这些较低级别的操作。

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