1

Postgres DB、Java with JPA 2.0、および eclipseLink があります。

私のToオブジェクトで:

     @Column(name = "mask")
     private Boolean mask;

IN DB: mask bit(4) DEFAULT B'1000'::"bit",

オブジェクトを保持したい場合:

原因: org.postgresql.util.PSQLException: エラー: 列 "マスク" はビット型ですが、式はブール型です ヒント: 式を書き直すかキャストする必要があります。

TO クラスで試してみます: - Boolean - BitSet(4) - String - Integer - Char

TO object: @Column(name = "mask") private BitSet mask;

     public BitSet getMask() {
         BitSet work = new BitSet(4);        
         work.set(0);
         if (mask == null){
           return work;
         }
        return mask;
    }

    public void setMask(BitSet mask) {
      BitSet work = new BitSet(4);        
      work.set(0);
      if (mask== null) {
        this.mask= work;
      } else {
        this.mask= mask;
      }
    }

どうすればそれを機能させることができますか?

ブールメソッドは良くありません。1 ビットを保存してください。私はグーグルで検索し、フォーラムを失いました。

5 時間の Google 検索の後、次のことがわかりました: http://archives.postgresql.org/pgsql-bugs/2005-05/msg00014.php

そのpostgres BUGについて:

「実際に単一のブール型にマップされる「BIT」と呼ばれる JDBC 型を持つことは非常に混乱を招きます。JDBC の BIT が「bit」と呼ばれるサーバー型とはの関係もないと仮定すると、それらが同じ名前なら、物事はより明確になるはずです。」

4

1 に答える 1

1

生の JDBC を介してフィールドにアクセスすると、返される型は何ですか?

文字列としてマッピングしようとしましたが、どのようなエラーが発生しますか? 型を変換するために @Converter を使用する必要がある場合があります。

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Mapping/Basic_Mappings/Default_Conversions_and_Converters/Converterを参照して ください

于 2012-07-31T14:41:51.810 に答える