GlassFish 3.1.2.2およびEclipseLink 2.3.2でJPAを使用するアプリケーションを作成しています。Oracle DB 11g を使用しており、TIMESTAMPTZ フィールド タイプを使用してタイムゾーンで日付と時刻を保存しようとしています。
私の設定では、日付と時刻をタイムゾーンとともにデータベースに永続化できます。(更新-実際に実際のSQL呼び出しを見ると、日付と時刻のみが渡されます。OracleはDBに保存するときにタイムゾーンを追加する必要があります)。
ただし、データを取得すると、次の例外が発生します。
例外 [EclipseLink-3002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.ConversionException 例外の説明: クラス [class oracle. sql.TIMESTAMPTZ]、マッピング [org.eclipse.persistence.mappings.DirectToFieldMapping[startDateTime-->APPT_EVENT.START_DATE_TIME]] から記述子 [RelationalDescriptor(com.ntst.caremanager.server.entities.ApptEvent] --> [DatabaseTable(APPT_EVENT) )])]、[class java.util.Date] に変換できませんでした。
誰もこれに遭遇したことがありますか?これは、エンティティ クラスの「startDateTime」フィールドの設定方法です。
@Column(name = "START_DATE_TIME")
@Temporal(TemporalType.TIMESTAMP)
private Date startDateTime;
START_DATE_TIME は、次の DDL を使用して DB で定義されます。
"START_DATE_TIME" TIMESTAMP (6) WITH TIME ZONE
eclipselink wiki hereで、EclipseLinkが変換を必要とせずにOracleのTIMESTAMPTZをネイティブにサポートしていることを読みました。また、エンティティ クラスで「日付」時刻の代わりに「カレンダー」タイプを使用してみました。
更新:これも試しました
@Convert("timestamptz")
@TypeConverter(name="timestamptz", dataType=TIMESTAMPTZ.class)
@Column(name = "START_DATE_TIME")
@Temporal(TemporalType.TIMESTAMP)
private Date startDateTime;
まだ運がありません。奇妙なことに、コンバーターを追加すると、データベースへの永続化が機能しなくなります。値を保存しようとすると、このエラーが発生します。
例外 [EclipseLink-3002] (Eclipse Persistence Services - 2.3.3.v20120629-r11760): org.eclipse.persistence.exceptions.ConversionException 例外の説明: クラス [クラスのオブジェクト [12/4/12 7:00 AM] java.util.Date]、マッピング [org.eclipse.persistence.mappings.DirectToFieldMapping[startDateTime-->APPT_EVENT.START_DATE_TIME]] からの記述子 [RelationalDescriptor(com.ntst.caremanager.server.entities.ApptEvent] --> [DatabaseTable] (APPT_EVENT)])]、[class oracle.sql.TIMESTAMPTZ] に変換できませんでした。
値を取得しようとすると、まだ同じエラーが発生します。また、Glassfish を EclipseLink 2.3.3 に更新しようとしたところ、同じエラーが発生しました。
これは私の永続化ファイルです:
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="CM-warPU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>CMDEV</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="eclipselink.logging.level" value="FINE"/>
<property name="eclipselink.logging.parameters" value="true"/>
<property name="eclipselink.target-server" value="SunAS9"/>
</properties>
誰かが以前にこの問題を見たことがありますか、または私が犯した可能性のあるエラーを見ましたか?
ありがとうございました!