sql >> データベース >  >> RDS >> PostgreSQL

byte[]の適切なHibernateアノテーション

    byte []プロパティに注釈を付けるための移植可能な方法は何ですか?

    それはあなたが望むものに依存します。 JPAは、注釈のないbyte[]を永続化できます 。 JPA 2.0仕様から:

    11.1.6基本的な注釈

    Basic アノテーションは、データベース列へのマッピングの最も単純なタイプです。Basic アノテーションは、Javaプリミティブ、タイプ、プリミティブタイプのラッパー、java.lang.Stringのいずれかのタイプの永続プロパティまたはインスタンス変数に適用できます。 、java.math.BigIntegerjava.math.BigDecimaljava.util.Datejava.util.Calendarjava.sql.Datejava.sql.Timejava.sql.Timestamp byte[]Byte[] char[]Character[] 、enums、およびSerializableを実装するその他のタイプ 。セクション2.8で説明されているように、Basicの使用 これらのタイプの永続フィールドおよびプロパティの注釈はオプションです。そのようなフィールドまたはプロパティにBasicannotationが指定されていない場合、Basicアノテーションのデフォルト値が適用されます。

    そして、Hibernateはそれを「デフォルトで」SQL VARBINARYにマップします (またはSQL LONGVARBINARY Columnによって異なります サイズ?)PostgreSQLがbyteaで処理する 。

    ただし、byte[]が必要な場合 ラージオブジェクトに保存するには、@Lobを使用する必要があります 。仕様から:

    11.1.24ロブアノテーション

    Lob アノテーションは、永続的なプロパティまたはフィールドを、データベースでサポートされているラージオブジェクトタイプに対してラージオブジェクトとして永続化する必要があることを指定します。ポータブルアプリケーションでは、Lobを使用する必要があります。 データベースにマッピングするときの注釈Lob タイプ。 Lob アノテーションは、BasicアノテーションまたはElementCollectionと組み合わせて使用​​できます。 要素コレクションの値がbasictypeの場合の注釈。 Lob バイナリタイプまたは文字タイプのいずれかです。 Lob typeは、永続フィールドまたはプロパティのタイプから推測され、文字列と文字のタイプを除いて、デフォルトはBlobです。

    そして、HibernateはそれをSQL BLOBにマップします PostgreSQLがoidで処理する 。

    これは、Hibernateの最近のバージョンで修正されていますか?

    さて、問題は私が問題が正確に何であるかわからないということです。しかし、少なくとも、3.5.xブランチの3.5.0-Beta-2(変更が導入された場所)から何も変更されていないと言えます。

    しかし、HHH-4876、HHH-4617、PostgreSQLおよびBLOB(PostgreSQLDialectのjavadocに記載)などの問題についての私の理解 )は、次のプロパティを設定することになっているということです

    hibernate.jdbc.use_streams_for_binary=false
    

    oidを使用する場合 つまり、byte[] @Lobを使用 (これはVARBINARY以来の私の理解です Oracleで望むものではありません)。これを試しましたか?

    別の方法として、HHH-4876は、非推奨のPrimitiveByteArrayBlobTypeを使用することを提案しています。 古い動作(Hibernate 3.5より前)を取得します。

    参考資料

    • JPA2.0仕様
      • セクション2.8「非関係フィールドまたはプロパティのデフォルトのマッピング」
      • セクション11.1.6「基本的な注釈」
      • セクション11.1.24「ロブアノテーション」

    リソース

    • http://opensource.atlassian.com/projects/hibernate/browse/HHH-4876
    • http://opensource.atlassian.com/projects/hibernate/browse/HHH-4617
    • http://relation.to/Bloggers/PostgreSQLAndBLOBs


    1. Fedora12でMySQLリレーショナルデータベースを使用する

    2. PG COPYエラー:整数の入力構文が無効です

    3. Railsで、{adapter => postgresqlのデータベースを作成できませんでした、

    4. インデックスチューニングへのアプローチ–パート1