java - 使用 EclipseLink 使用复杂对象类型参数调用 Oracle 中的存储过程

标签 java oracle stored-procedures eclipselink

由于deprecation of JPublisher从 Oracle 12c 开始,我们目前正在考虑其他方式来调用以复杂对象类型作为参数的存储过程,而不是生成的类和 JDBC。

看来EclipseLink JPA Extensions是唯一可以提供帮助的工具。按照这些示例,我发现我能够使用简单类型作为参数来调用过程。但我无法注释我的实体类,以便当对象稍微复杂一点时它们能够正确映射到数据库中的 PL/SQL 对象类型。

例如,我们有一个存储过程,它具有相同对象类型 A 的一个输入和一个输出参数。类型结构如下:

对象类型A包含<-表类型B,它是<-对象类型C的表,它包含<-表类型D,它是<-对象类型E的表。

我想我应该使用 @OracleObject 作为对象类型,使用 @PLSQLTable 作为表类型,但我还没有找到如何将它们正确组合在一起的方法。

我尝试过以下方法:

// All annotations with the required elements

@Embeddable
@Struct
@OracleObject
public class A {
    @Column(name = "B")
    private B b;

    // Getter and setter
}

@Embeddable
@Struct
@PLSQLTable (.., nestedType = "C")
public class B { }

@Embeddable
@Struct
@OracleObject
public class C {}

我尝试将带有正确注释元素的 @PLSQLTable 添加到 A 类和/或 C 类,但 Java 和 DB 对象未正确相互映射,并且在调用期间出现java.sql.SQLException:无效的列类型

如果有人可以向我解释如何使用注释来告诉 EclipseLink 对象 A 包含对象 C 的表 B,我将不胜感激。

非常感谢。

最佳答案

这里有同样的问题。我一直在走 Spring Data Oracle Extension 项目的道路。然而给出的例子是一个简单的pojo,而不是一个复杂的对象。
尽管我能找到的任何地方都缺乏示例,但我能够通过 SqlReturnSqlData() 拉回一个非常复杂的对象,但似乎找不到将复杂对象插入到 Oracle 存储过程中的方法。我还没有找到任何人如何插入自定义复杂 Oracle 类型的完整示例。通过 Spring 或任何其他方式。

关于java - 使用 EclipseLink 使用复杂对象类型参数调用 Oracle 中的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36366576/

相关文章:

java - 在ABAP中,Java的finally关键字等价于什么?

Oracle 临时表空间

c# - CUD : What is the purpose of the two SELECT statements in a scaffolded Insert stored procedure? 的存储过程

mysql - 存储过程中动态游标的性能

sql - 调试存储过程时如何执行sql查询

java - com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException : Unknown column 'JDODETACHEDSTATE' in 'field list'

java - 将 Java 架构堆栈映射到 Microsoft

java - 为什么 Java swing 组件显示为不轻量级,尽管它们应该是轻量级的?

sql - partition by/order by 是否暗示查询中的排序?

sql - oracle 11g xe 用户数据