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



由于JPublisher自Oracle12c以来遭到弃用,我们目前正在考虑其他方法,即如何使用复杂的对象类型来调用存储过程作为参数,而不是使用生成的类和JDBC。

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

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

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

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

我试过以下几种:

// 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: Invalid column type

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

非常感谢。

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

最新更新