2010-12-02 8 views
2

2つの異なるボックスでHibernate 3.6を使用していますが、どちらもまったく同じデータベーステーブルから読み込んでいます。 (日JDK 1.6.0_22-B04とUbuntu Linuxの)一台のマシン上でこれらのプロパティを持つエンティティをロードするときに、私は256をロードすることができるよ今Hibernateが読み込まれていないPostgresql byteaが一貫して

@Basic(fetch=FetchType.EAGER) 
@Column(name="encryptedkey",length = 256) 
protected byte[] encryptedKey; 

@Basic(fetch=FetchType.EAGER) 
@Column(name="encryptediv",length = 256) 
protected byte[] encryptedIV; 

次のような二つのフィールドのHibernateアノテーションがあります4バイトの暗号化されたキーとIVがあります。

しかし、別のマシン(Sun JVM 1.6.0_22-b04のWindows 2003サーバーSP2 Enterprise Edition)では、フィールドごとに0または511バイトがロードされています。それ以外の場合、両方のシステムのJarファイルは同じです。

データベースエンジンはPostgreSQL 9.0で、最新のPostgreSQL JDBCドライバを使用しています。

誰かが間違っている可能性がありますか?

+0

postgre列の型は配列ですか? – Bozho

+0

postgreのタイプは 'bytea'です – malaverdiere

+0

アップグレードされたJVM、アップグレードされたHibernate 1.6 libs、Hibernate 3.3.2へのダウングレード、infinispanからehcacheに変更されました。同じ結果を得たJDBC3とJDBC4ドライバも試しました。これらの事のどれもが何も変えなかった。 – malaverdiere

答えて

2

JRE libフォルダにPosgreSQL 8.4ドライバが入っていることが判明しました。それを削除すると、その問題が解決されました。

+0

おそらくバイトエスケープ形式が変更されているためです。サーバー上で 'bytea_output'を「エスケープ」に設定すると、JREとは別の場所でこれをやり直さなければならない場合に備えて、それを回避することができます。 – araqnid

+0

良い点。そのドライバを削除できない場合は、ドライバがエスケープ処理を取り消す必要があります。大きなパフォーマンスがヒット。 – malaverdiere

0

決定的な解決策:

ALTER DATABASE myAmazingDbOnALinuxServer SET bytea_output = 'escape'; 

PD:この変数はPostgreとの非互換性は、Windowsにインストールされているバックアップは、bytea型の列を含むテーブルの行ごとにCOPYエラーがスローされますがあります。

関連する問題