如何解决如何从休眠中调用存储过程,将自定义数据库类型作为参数?
我阅读了数十个问题、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 举报,一经查实,本站将立刻删除。