如何使用Spring Data JPA在实体中映射Oracle Object类型?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Spring Data JPA在实体中映射Oracle Object类型?相关的知识,希望对你有一定的参考价值。

此问题与使用Spring Data JPA在实体中映射Oracle对象类型特别相关。 other question没有帮助详细解释这个问题。

所以下面是详细信息:

我无法在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中将requestedDate映射到DATE_TYP(oracle对象类型)的REQUESTEDDATE列?

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

答案

This answer states, that there is no official support in JPA for Oracles Object Types, but support for it in Eclipse Link。我想这意味着Hibernate没有开箱即用的支持。

But this blog post describes how to implement a UserType to map a Java class to an Oracle Object type

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

以上是关于如何使用Spring Data JPA在实体中映射Oracle Object类型?的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring Data JPA 中,如何在运行时添加实体?

spring-data-jpa实体类继承抽象类如何映射父类的属性到数据库

学习Spring-Data-Jpa---JPA基本注解

Spring Data JPA 将原生查询结果映射到非实体 POJO

Spring Data JPA 梳理 - JPA是什么

spring data JPA忽略查询方法上的fetchmode