【问题标题】:How to map Oracle Object type in an entity using Spring Data JPA?如何使用 Spring Data JPA 在实体中映射 Oracle 对象类型?
【发布时间】:2017-11-01 22:08:55
【问题描述】:

这个问题与使用 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 ???
}

如何将 requestedDate 映射到 Spring JPA 中 DATE_TYP(oracle 对象类型)的 REQUESTEDDATE 列?

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

【问题讨论】:

标签: hibernate spring-data spring-data-jpa oracle-objects


【解决方案1】:

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 实现将实体映射到数据库。 Spring Data 提供的转换和投影仅在将输入参数/输出值传递给/从 JPA 提供者获取它们之前转换它们。

【讨论】:

  • 谢谢仁。您的回答有助于理解问题和解决方案。为实现 UserType 而提供的链接在一定程度上有所帮助。我偶然发现了这个链接:blog.xebia.com/understanding-and-writing-hibernate-user-types - 这有助于更好地理解这个概念。无论如何,我接受你的回答。
猜你喜欢
  • 2020-02-21
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
  • 2018-11-25
  • 2021-09-02
  • 2021-10-16
  • 1970-01-01
  • 2019-02-25
相关资源
最近更新 更多