org.eclipse.persistence.exceptions.ConversionException在使用JPA将Oracle TIMESTAMPTZ转换为java.util.Date时
我使用的是Eclipselink 2.7.6、Oracle 12c、Payara 5,运行查询时出现转换异常 实体定义为: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
@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>