使用EclipseLink

时间:2016-04-01 22:07:23

标签: java oracle stored-procedures eclipselink

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

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

例如,我们有一个存储过程,它有一个输入和一个相同的对象类型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,我将非常感激。

非常感谢。

1 个答案:

答案 0 :(得分:0)

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