- PR -

hibernateでoracleのdate型を登録

1
投稿者投稿内容
ピンクの恐竜
常連さん
会議室デビュー日: 2005/02/01
投稿数: 42
投稿日時: 2006-06-19 18:16
こんにちは。
いつも勉強させていただいております。

現在hibernateについて調査しております。
(根本的な原因はhibernateではないかもしれません。)

Javaアプリケーションからoracleのdate型のカラムに対して
日付+時分秒の値を入れたいと考えております。

hibernateのマッピングでdate型と指定すると日付しか入らず、
time型と指定すると時分秒しか入りません。
timestamp型と指定すると
コード:
java.sql.BatchUpdateException: ORA-03115: サポートされていないネットワークのデータ型または表現があります。


とエラーが発生します。

hibernateを使わずにJDBCで直接つなげて、PreparedStatementで以下のようにSQLを実行した場合でも同じエラーが発生します。
コード:
PreparedStatement pstmt = null;
StringBuffer sql = new StringBuffer();
sql.append("UPDATE ");
sql.append("TABLE ");
sql.append("SET ");
sql.append("UPDATE_DATE = ? ");
sql.append("WHERE ");
sql.append("USER_ID = 'TEST' ");
pstmt = connect.prepareStatement( sql.toString() );
pstmt.setTimestamp(1,new Timestamp(new Date().getTime()));
pstmt.executeUpdate();




各バージョンは以下のようになります。
JDK1.4.2_05
Oracle8 Enterprise Edition Release 8.0.6.0.0
Oracle JDBC Driver version - 9.0.2.0.0
hivernate 2.1.8

過去スレを探したところ似たようなスレがあったのですが、
私の場合はoracleのsysdateにはこだわっていません。

いろいろ調べた結果DBとDriverのバージョンに問題がありそうな気がします。
しかし実際にはコネクション接続の部分はJNDIを使用し、
そのJNDIは既存他システムで使用しているため、DB,Driverのバージョンは
変更できません。

他に何かいい方法はないでしょうか?

以上よろしくお願い致します。
でるびすた
常連さん
会議室デビュー日: 2005/06/15
投稿数: 22
投稿日時: 2006-06-20 09:12
calendar型を指定すればうまくいくのでは?
ピンクの恐竜
常連さん
会議室デビュー日: 2005/02/01
投稿数: 42
投稿日時: 2006-06-20 10:11
返信ありがとうございます。

ご指摘していただいたようにcalendar型で実施したところ、
timestamp型を指定したときと全く同じエラーが発生しました。
calendar_dateにしたとことdateと同じように
日付だけの登録になりました。
またカスタム値型としてUserTypeをimplementsして
コード:
Hibernate.TIMESTAMP.nullSafeSet(st,new Timestamp(new Date().getTime()),index);



コード:
Hibernate.CALENDAR.nullSafeSet(st,Calendar.getInstance(),index);


として無理やり登録してみようと試みたのですが結果は同じエラーが発生しました。

他に何か気になる点があればなんでもご指摘ください。
よろしくお願い致します。
もしもし
ぬし
会議室デビュー日: 2004/10/15
投稿数: 280
投稿日時: 2006-06-20 10:25
Oracle 提供するの JDBC ドライバをご使用なら、データベースの date 型に
対応する JDBC の oracle.sql.DATE を使用してはいかがかと。

ただし、
- JDBC ドライバのバージョンって 8.1.7.x, 9.0.1.x 9.2.0.x 10.1.0.x, 10.2.0.x
となりますけど、9.0.2 ってのは無いはず。正しいバージョンは何になります?
(9.2.0 だと接続先データベースのバージョンは 8.1.7 以降)
- JDK1.4.2 に対応する JDBC ドライバは ojdbc14.jar になりますがこっちを使用して
いますか? classes12.jar/zip は JDK1.2 か JDK1.3 のみです。
さっきの疑問点にからみますが、Oracle 9.2.0 の JDBC ドライバならともかく、
よもや 9.0.1 とかだったりするとそもそも JDK1.4 に対応した JDBC ドライバ自体
存在しないです。

_________________
もしもし@RMAN 友の会
ピンクの恐竜
常連さん
会議室デビュー日: 2005/02/01
投稿数: 42
投稿日時: 2006-06-20 11:38
返信ありがとうございます。

使用driverはclasses12.jarです。
MANIFET.MFのSpecification-Versionを見ましたのでversionは9.0.2で間違いないと思います。
もしかしたら見方が間違ってるかもしれません・・・。すいません。
しかし問題はversion以前の問題でしたね・・

引用:

classes12.jar/zip は JDK1.2 か JDK1.3 のみです。


知りませんでした。
勉強不足を痛感します。
たしかに今MANIFET.MFを見てみるとその事が記述されてました。

既存の多数のシステムではJDK1.4.2なのにclasses12で動いています。
危険ですね。

ojdbc14.jar に変更したら上手く出来るかどうかまた後程レスします。

ありがとうございます。

[ メッセージ編集済み 編集者: ピンクの恐竜 編集日時 2006-06-20 11:45 ]

[ メッセージ編集済み 編集者: ピンクの恐竜 編集日時 2006-06-20 11:46 ]
ピンクの恐竜
常連さん
会議室デビュー日: 2005/02/01
投稿数: 42
投稿日時: 2006-06-20 13:23
ドライバー 9.2.0をダウンロードして同じ事をやってみました。

結果は同じエラーが発生しました。

ドライバー 9.2.0のMANIFET.MFのSpecification-Versionを見たら
9.0.2.0.0と記述されていましたので9.0.2.0.0=9.2.0なのかなと予想します。

ということは今使っているJDBCドライバーのバージョンは
DBのバージョンもJavaのバージョンもサポートしていないって事ですね

危険なにおいがぷんぷんします。

なにはともあれ今回みなさまのおかげで今使っているDBとJavaを正式にサポートする
JDBCドライバーは存在しないという事がわかりました。

hibernateの導入も今回は見送ります。

どうもありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)