Eclipselink不转换oracle.sql.TIMESTAMPTZ [英] Eclipselink not converting oracle.sql.TIMESTAMPTZ

查看:107
本文介绍了Eclipselink不转换oracle.sql.TIMESTAMPTZ的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我使用Eclipselink作为持久性提供程序从数据库中获取值时,出现错误.它没有将oracle.sql.TIMESTAMPTZ转换为java.sql.Timestamp或java.util.Date .

I am getting an error when I am fetching value from DB using Eclipselink as persistence provider. It is not converting oracle.sql.TIMESTAMPTZ to java.sql.Timestamp or to java.util.Date.

Query q = em.createNativeQuery("SELECT * FROM MY_Schema.MyTable MT WHERE MT.START_DT = (SELECT MAX(START_DT) FROM MY_Schema.MyTable)",MyTable.class);


@Entity
@Table(name = "MyTable", schema = "MY_Schema")
public class MyTable implements Serializable {
    @EmbeddedId
    private MyTableId id;


@Embeddable
public class MyTableId implements Serializable {

  @Temporal(TemporalType.TIMESTAMP)
  @Column(name = "END_DT")
  private Calendar endTime;

  @Temporal(TemporalType.TIMESTAMP)
  @Column(name = "START_DT")
  private Calendar startTime;


例外


Exception

原因:异常[EclipseLink-3001](Eclipse Persistence Services- 2.6.8.WAS-v20181218-0accd7f):org.eclipse.persistence.exceptions.ConversionException异常描述:对象[oracle.sql.TIMESTAMPTZ@6156ebf7]类别[oracle.sql.TIMESTAMPTZ类别]的,无法转换为[class java.sql.Timestamp]类别.在org.eclipse.persistence.internal处的org.eclipse.persistence.exceptions.ConversionException.couldNotBeConverted(ConversionException.java:78)处org.eclipse.persistence.internal.helper.ConversionManager.convertObjectToTimest mp(ConversionManager.java:751)处.helper.ConversionManager.convertObject(ConversionManager.java:112)

Caused by: Exception [EclipseLink-3001] (Eclipse Persistence Services- 2.6.8.WAS-v20181218-0accd7f): org.eclipse.persistence.exceptions.ConversionException ExceptionDescription: The object [oracle.sql.TIMESTAMPTZ@6156ebf7], of class[class oracle.sql.TIMESTAMPTZ], could not be converted to [class java.sql.Timestamp]. at org.eclipse.persistence.exceptions.ConversionException.couldNotBeConverted(ConversionException.java:78) at org.eclipse.persistence.internal.helper.ConversionManager.convertObjectToTimest mp(ConversionManager.java:751) at org.eclipse.persistence.internal.helper.ConversionManager.convertObject(ConversionManager.java:112)



我发现的东西



Things I found

在调试时,我在eclipselink ConversionManager类中发现了这一点oracle.sql.TIMESTAMPTZ没有任何处理.直接在此方法中引发异常.

While debugging I found that in eclipselink ConversionManager class there is no handling for oracle.sql.TIMESTAMPTZ. It is directly throwing exception in this method.



/**
     * INTERNAL:
     * Build a valid instance of java.sql.Timestamp from the given source object.
     * @param sourceObject    Valid object of class java.sql.Timestamp, String, java.util.Date, or Long
     */
    protected java.sql.Timestamp convertObjectToTimestamp(Object sourceObject) throws ConversionException {
        java.sql.Timestamp timestamp = null;

        if (sourceObject instanceof java.sql.Timestamp) {
            return (java.sql.Timestamp)sourceObject;// Helper timestamp is not caught on class check.
        }

        if (sourceObject instanceof String) {
            timestamp = Helper.timestampFromString((String)sourceObject);
        } else if (sourceObject instanceof java.util.Date) {// This handles all date and subclasses, sql.Date, sql.Time conversions.
            timestamp = Helper.timestampFromDate((java.util.Date)sourceObject);
        } else if (sourceObject instanceof Calendar) {
            return Helper.timestampFromCalendar((Calendar)sourceObject);
        } else if (sourceObject instanceof Long) {
            timestamp = Helper.timestampFromLong((Long)sourceObject);
        } else {
            throw ConversionException.couldNotBeConverted(sourceObject, ClassConstants.TIMESTAMP);
        }
        return timestamp;
    }

推荐答案

oracle.sql.TIMESTAMPTZ处理特定于DB,由Oracle9Platform的子类完成.确保使用目标数据库" 持久性属性

oracle.sql.TIMESTAMPTZ handling is DB specific and done by subclasses of the Oracle9Platform. Make sure you have specified the correct target-database platform class that matches your database using the 'target-database' persistence property

这篇关于Eclipselink不转换oracle.sql.TIMESTAMPTZ的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆