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

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

问题描述:

这个问题特别涉及到使用Spring Data JPA在实体中映射Oracle对象类型。 other question没有帮助详细解释问题。如何使用Spring Data JPA在实体中映射Oracle对象类型?

因此,这里有以下细节:

我无法找到实体有关映射的Oracle对象类型信息与Spring JPA的数据无论是在春季数据JPA参考,也没有在其他任何搜索结果的对象。

场景:

比方说,我有以下date_typ甲骨文类型。

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数据库中的表

现在,假设注册,其中一列是上述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 J中,如何将requestedDate映射到DATE_TYP(oracle对象类型)的REQUESTEDDATE列PA?

注:我使用Hibernate作为持久性提供者。

+0

[Java中的Oracle数据库对象类型导入]的可能重复(https://stackoverflow.com/questions/14600155/oracle-database-object-type-import-in-java) – danihp

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数据并没有真正涉及到这个,因为它只是使用JPA实现将enities映射到数据库。 Spring Data提供的转换和投影仅在将输入参数/输出值传递给JPA提供者或从JPA提供者获取它们之后才转换。

+0

谢谢仁。你的回答有助于理解问题和解决方案。为实现UserType而提供的链接在一定程度上有所帮助。我偶然发现了这个链接:http://blog.xebia.com/understanding-and-writing-hibernate-user-types/ - 这有助于更好地理解这个概念。无论如何,我接受你的答案。 –