1

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 );
  1. DateまたはTimestampフィールドのcol.getSqlType(dialect、mapping)はdateです。columnInfo.getTypeName()はタイムスタンプであるため、ifクエリの最初の部分が一致しません

  2. 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)のみにあります。

クロスはここで休止状態のフォーラムに投稿されました

4

2 に答える 2

0

スキーマ検証を無効にしましたが、問題なく動作しました。

スキーマ検証を無効にしますか? – スティーブ・エバーソール

于 2012-07-20T09:18:37.270 に答える
0

@Temporal アノテーションを使用してみてください。それは休止状態が何をすべきかを説明するかもしれません

于 2012-07-17T21:31:48.867 に答える