如何在Java中表示Oracle Interval

6

我正在使用Java 7和Hibernate 4。

希望使用Oracle Interval数据类型(http://psoug.org/definition/INTERVAL.htm)来表示一定数量天数的间隔。

不知道要使用什么Java类型来映射此Oracle Interval对象。

我想使用标准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。


1
看看JPA规范2.0(JSR 317),搜索任何关于数据类型的一般性讨论。恐怕你不会在那里找到太多内容。JPA仅支持数字、字符串和日期。它们甚至不支持任何集合或XML数据类型,只支持标量。也许你得等到3.0版本。JPAs必须涵盖所有数据库的“最大公约数”。所有Oracle的特殊功能都被视为“非法”,因为这将破坏供应商的独立性。 - ibre5041
2个回答

4

请查看这个SO回答

  1. You can define an Interval Hibernate UserType
  2. Then your Entities will simply use Integer:

    @TypeDef(name="interval", typeClass = Interval.class)
    
    @Type(type = "interval")    
    private Integer interval;
    
  3. The Internal UserType is the Java Integer to SQL INTERVAL adapter.


2
如果将映射到字符串起作用,那么您可以选择以下两种方法之一:
  1. (JPA 2.1)编写转换器,或
  2. (JPA < 2.1)编写Hibernate UserType
以在字符串和Interval类之间进行转换。
您可以自己编写Interval的POJO,也可以利用JODA Time的Duration

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接