如何用Java表示Oracle Interval

时间:2014-08-11 06:08:44

标签: java database oracle hibernate jpa

我正在使用Java 7和hibernate 4。

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

想知道用于映射此Oracle Interval对象的Java Type。

我想使用标准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 String会起作用,但是我想得到它是某种日期对象所以我不必自己解析它。

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

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

2 个答案:

答案 0 :(得分:4)

检查SO answer

  1. 您可以定义Interval Hibernate UserType
  2. 然后您的实体将只使用整数:

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

答案 1 :(得分:1)

如果映射到String,则可以

  1. (JPA 2.1)编写转换器,或
  2. (JPA< 2.1)编写Hibernate UserType
  3. 将String转换为Interval类。

    你可以自己为Interval写一个POJO,或者使用JODA Time Duration