由于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/