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