org.eclipse.persistence.exceptions.ConversionException在使用JPA将Oracle TIMESTAMPTZ转换为java.util.Date时

org.eclipse.persistence.exceptions.ConversionException在使用JPA将Oracle TIMESTAMPTZ转换为java.util.Date时,java,oracle,jpa,eclipselink,Java,Oracle,Jpa,Eclipselink,我使用的是Eclipselink 2.7.6、Oracle 12c、Payara 5,运行查询时出现转换异常 实体定义为: @Column(name = "RUN_START_TIME") @Temporal(TemporalType.TIMESTAMP) private Date runStartTime; @Column(name = "RUN_STOP_TIME") @Temporal(TemporalType

我使用的是Eclipselink 2.7.6、Oracle 12c、Payara 5,运行查询时出现转换异常

实体定义为:

    @Column(name = "RUN_START_TIME")
    @Temporal(TemporalType.TIMESTAMP)
    private Date runStartTime;
    @Column(name = "RUN_STOP_TIME")
    @Temporal(TemporalType.TIMESTAMP)
    private Date runStopTime;
persistence.xml文件具有以下属性:

<properties>
      <property name="eclipselink.logging.level" value="FINE"/>
      <property name="eclipselink.target-database" value="org.eclipse.persistence.platform.database.Oracle12Platform"/>
      <property name="eclipselink.target-server" value="Glassfish"/>
    </properties>
由于消息总是相同的,只是类名发生了变化,我仍然认为我的某些配置不正确。我确保在POM文件中使用以下内容,以确保使用最新的日期格式:

        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>org.eclipse.persistence.oracle</artifactId>
            <version>2.7.6</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8 -->
        <!--dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc8</artifactId>
            <version>12.2.0.1</version>
        </dependency-->
        <!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8dms -->
        <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc8dms</artifactId>
            <version>19.6.0.0</version>
        </dependency>
        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>javax.persistence-api</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>eclipselink</artifactId>
            <version>2.7.6</version>
        </dependency>

org.eclipse.persistence
org.eclipse.persistence.oracle
2.7.6
com.oracle.database.jdbc
ojdbc8dms
19.6.0.0
javax.persistence
javax.persistence-api
2.2
org.eclipse.persistence
日食
2.7.6
我尝试了各种版本的jdbc驱动程序,您可以从评论的版本中看到这一点


我仍然不确定什么可能被错误配置。

不要使用旧的
Date
而是使用
java.time的新类
不,这不起作用:实体类[class com.crawford.proarchiver.papswebservice.entity.ASRRunEvent]上属性[runEventTime]的类型[class java.sql.time]不是时间映射的有效类型。属性必须定义为java.util.Date或java.util.Calendar。您可以获得有关如何使用的详细信息。OK,尝试了一下,得到了以下结果:异常[EclipseLink-3002](Eclipse持久性服务-2.7.6.payara-p1):org.Eclipse.Persistence.exceptions.ConversionException异常描述:对象[oracle.sql]。TIMESTAMPTZ@3a24e26f],属于类[classoracle.sql.TIMESTAMPTZ],来自映射[org.eclipse.persistence.mappings.DirectToFieldMapping[runStartTime-->ASR_RUN.RUN_START_TIME]]带有描述符[RelationalDescriptor(..ASRRun-->[DatabaseTable(ASR_RUN)],无法转换为[class java.TIME.LocalDateTime]。感谢您的建议!请继续提供。还有类型java.sql.Timestamp。IMHO甚至Java8都没有完成其API。这是一个非常复杂的主题,您应该在尝试之前阅读一些相关理论。还要注意,带有时区的Oracle数据类型Timestamp几乎没有性能缺陷。不要使用旧的
日期
,而是使用新的类
java.time
note的类型:实体类[class com.crawford.proarchiver.papswebservice.entity.ASRRunEvent]上属性[runEventTime]的类型[class java.sql.time]不是时间映射的有效类型。该属性必须定义为java.util.Date或java.util.Calendar。我不是说java.sql.Time,而是说。您可以获得有关如何使用的详细信息。好的,尝试了一下,得到了以下结果:异常[EclipseLink-3002](Eclipse持久性服务-2.7.6.payara-p1):org.eclipse.persistence.exceptions.ConversionException异常描述:对象[oracle.sql]。TIMESTAMPTZ@3a24e26f]类[classoracle.sql.TIMESTAMPTZ],来自映射[org.eclipse.persistence.mappings.DirectToFieldMapping[runStartTime-->ASR_RUN.RUN_START_TIME]]和描述符[RelationalDescriptor(..…ASRRun-->[DatabaseTable](ASR_RUN)]],无法转换为[class java.time.LocalDateTime]。感谢您的建议!请继续提供。还有类型java.sql.Timestamp。IMHO甚至Java8都没有完成其API。这是一个非常复杂的主题,您应该在尝试之前阅读一些相关理论。还要注意,带有时区的Oracle数据类型Timestamp几乎没有性能缺陷。
Exception [EclipseLink-3002] (Eclipse Persistence Services - 2.7.6.payara-p1): org.eclipse.persistence.exceptions.ConversionException
Exception Description: The object [oracle.sql.TIMESTAMPTZ@38b7d502], of class [class oracle.sql.TIMESTAMPTZ], from mapping [org.eclipse.persistence.mappings.DirectToFieldMapping[runStartTime-->ASR_RUN.RUN_START_TIME]] with descriptor [RelationalDescriptor(....ASRRun --> [DatabaseTable(ASR_RUN)])], could not be converted to [class java.time.OffsetDateTime].
    at org.eclipse.persistence.exceptions.ConversionException.couldNotBeConverted(ConversionException.java:81)
    at org.eclipse.persistence.internal.helper.ConversionManager.convertObjectToOffsetDateTime(ConversionManager.java:930)
    at org.eclipse.persistence.internal.helper.ConversionManager.convertObject(ConversionManager.java:123)
    at org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform.convertObject(DatasourcePlatform.java:226)
    at org.eclipse.persistence.mappings.foundation.AbstractDirectMapping.getObjectValue(AbstractDirectMapping.java:611)
    at org.eclipse.persistence.queries.ReportQueryResult.processItemFromMapping(ReportQueryResult.java:186)
        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>org.eclipse.persistence.oracle</artifactId>
            <version>2.7.6</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8 -->
        <!--dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc8</artifactId>
            <version>12.2.0.1</version>
        </dependency-->
        <!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8dms -->
        <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc8dms</artifactId>
            <version>19.6.0.0</version>
        </dependency>
        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>javax.persistence-api</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.persistence</groupId>
            <artifactId>eclipselink</artifactId>
            <version>2.7.6</version>
        </dependency>