ORACLE TIMESTAMP(9)フィールドをJavaバージョンのjava.sql.Timestampまたはjava.util.Dateにマッピングする際に問題が発生する:-ojdbc 11.2.0.1.0 hibernate-annotations 3.3.1.GA ejb3-persistence 1.0.1.GA
マップしようとしています
UPDATE_TIMESTAMP_9 TIMESTAMP(9) NULL
TO
@Column(name = "UPDATE_TIMESTAMP_9")
private Date updateTimestamp_9;
例外を取得する
org.hibernate.HibernateException: Wrong column type in EMPLOYEE.EMPLOYEE for column UPDATE_TIMESTAMP_9. Found: timestamp, expected: date
さらに調べてみると、Table.javaの次の行でコードが「false」を返すことがわかりました。
final boolean typesMatch = col.getSqlType( dialect, mapping ).toLowerCase()
.startsWith( columnInfo.getTypeName().toLowerCase() )
|| columnInfo.getTypeCode() == col.getSqlTypeCode( mapping );
DateまたはTimestampフィールドのcol.getSqlType(dialect、mapping)はdateです。columnInfo.getTypeName()はタイムスタンプであるため、ifクエリの最初の部分が一致しません
col.getSqlTypeCode(mapping)は93(Types.TIMESTAMPのコード)を返します。ただし、columnInfo.getTypeCode()は1111を返します。したがって、クエリの2番目の部分でさえ一致しません。
問題は、フィールドUPDATE_TIMESTAMP_9のColumnMetadata rs.getInt( "DATA_TYPE")にデータを入力しているときに、Types.OTHERのコードである1111が返されることです。oracle columnInfo.getTypeCode()でTIMESTAMP(6)フィールドを使用すると、93が正しく返され、コードがレコードを正常に挿入することに注意してください。問題はTIMESTAMP(9)のみにあります。
クロスはここで休止状態のフォーラムに投稿されました