1

这个问题与使用 Spring Data JPA 在实体中映射 Oracle 对象类型特别相关。另一个问题无助于详细解释问题。

所以下面是详细信息:

我在 Spring Data JPA Reference 和任何其他搜索结果中都找不到与使用 Spring Data JPA 在实体对象中映射 Oracle 对象类型相关的信息。

设想:

假设我有以下date_typ Oracle 类型。

CREATE TYPE date_typ AS OBJECT (
  month         VARCHAR2(2),
  day           VARCHAR2(2),
  year          VARCHAR2(4),
  extension     VARCHAR2(10),
  MEMBER FUNCTION getFullDate RETURN VARCHAR2
);

CREATE TYPE BODY date_typ AS
  MAP MEMBER FUNCTION getFullDate RETURN VARCHAR2 AS
  BEGIN
    return month || day || year;
 END getFullDate;
END;

现在在 oracle 数据库表中,比如 REGISTRATION,其中一列是上面的 date_typ

Column      Type
REG_ID      VARCHAR2(25)  primary key
FIRSTNAME   VARCHAR2(30)  not null
LASTNAME    VARCHAR2(30)  not null
MIDDLEINIT  VARCHAR2(10) 
REQUESTEDDATE DATE_TYP
...
...

现在,我需要在实体中映射上述列

@Entity
@Table(name = "REGISTRATION", schema = "accounts")
public class RegistrationEntity {
    @Id
    @Column(name = "REG_ID")
    private String registrationId;

    @Column(name = "FIRSTNAME", nullable = false)
    private String firstName;

    @Column(name = "LASTNAME", nullable = false)
    private String lastName;

    @Column(name = "MIDDLEINIT")
    private String middleInitial;

    requestedDate ???
}

如何在 Spring JPA 中将 映射requestedDateDATE_TYP(oracle 对象类型)的REQUESTEDDATE列?

注意:我使用 Hibernate 作为持久性提供程序。

4

1 回答 1

1

这个答案指出,JPA 中没有对 Oracles Object Types 的官方支持,但在 Eclipse Link 中支持它。我想这意味着 Hibernate 对此没有开箱即用的支持。

但是这篇博文描述了如何实现将UserTypeJava 类映射到 Oracle 对象类型

Spring Data 并没有真正参与其中,因为它只是使用 JPA 实现将实体映射到数据库。Spring Data 提供的转换和预测仅在将输入参数/输出值传递给/从 JPA 提供者获取它们之前转换它们。

于 2017-06-01T08:03:39.610 回答