【问题标题】:How to represent Oracle Interval in Java如何在 Java 中表示 Oracle 间隔
【发布时间】:2014-08-11 06:08:44
【问题描述】:

我正在使用 Java 7 和休眠 4。

想用oracle的Interval数据类型(http://psoug.org/definition/INTERVAL.htm)来表示一定天数的区间。

想知道使用什么 Java 类型来映射这个 Oracle 间隔对象。

我想使用标准 Java 对象,而不是本文档 http://docs.oracle.com/cd/B28359_01/java.111/b31224/datacc.htm 中提到的任何 oracle.sql.* 对象。

这是我正在玩的桌子:


CREATE TABLE "MyTest" (
    "ID" NUMBER(14,0) NOT NULL
    "DELIVERY_PERIOD" INTERVAL DAY (3) TO SECOND (6), 
    CONSTRAINT "MYTEST_PK" PRIMARY KEY ("ID"));

编辑

我已经尝试过

@Temporal(TemporalType.TIME)
private java.util.Date deliveryPeriod;

得到错误:

Caused by: java.sql.SQLException: Invalid column type: getTime not implemented for class oracle.jdbc.driver.T4CIntervaldsAccessor

编辑 2

http://docs.oracle.com/cd/B12037_01/java.101/b10983/datamap.htm

我知道将它映射到 Java 字符串会起作用,但我希望它是某种日期对象,所以我不必自己解析它。

http://objectmix.com/jdbc-java/41781-oracle10g-oracle-sql-interval-type.html

我也想避免使用 oracle 特定的数据类型,例如 oracle.sql.INTERVALS

【问题讨论】:

  • 查看 JPA 规范 2.0 (JSR 317) 并搜索有关一般数据类型的任何部分。恐怕你不会在那里找到太多。 JPA 仅支持数字、字符串和日期。它们甚至不支持任何集合或 XML 数据类型,仅支持标量。也许你必须等待版本。 3.0。 JPA 必须涵盖所有数据库的“最大公约数”。 Oracle 的所有特殊功能都被认为是“非法的”,因为它会破坏供应商的独立性。

标签: java database oracle hibernate jpa


【解决方案1】:

查看SO answer

  1. 您可以定义一个 Interval Hibernate UserType
  2. 那么您的实体将简单地使用整数:

    @TypeDef(name="interval", typeClass = Interval.class)
    
    @Type(type = "interval")    
    private Integer interval;
    
  3. Internal UserType 是 Java 整数到 SQL INTERVAL 适配器。

【讨论】:

    【解决方案2】:

    如果映射到 String 有效,那么您也可以

    1. (JPA 2.1) 编写转换器,或
    2. (JPA

    在 String 到 Interval 类之间进行转换。

    Interval可以自己写POJO,也可以利用JODA Time的Duration

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多