2013-10-23 6 views
10

私のモデルクラス(作品): 列挙型を小文字の文字列として保存する方法は?

public class User ... { 

    @Enumerated(STRING) 
    private Status status; 

    ... 

    public enum Status { 

     ACTIVE, 
     INACTIVE; 

     @Override 
     public String toString() { 
      return this.name().toLowerCase(); 
     } 
    } 

    ... 

    public String getStatus() { 
     return status.name().toLowerCase(); 
    } 

    public void setStatus(Status status) { 
     this.status = status; 
    } 
} 

私はtoStringメソッドをオーバーライドする上でご覧のとおり

が、効果なし。 データベースの列挙ストアを ACTIVEまたは INACTIVEとしてください。

P.S.私は休止状態のjpaを使用します

ありがとう!

P.S.私はjsonを生成するRESTサービスを書くので質問します(間違いがなければjsonオブジェクトでは小文字を使います)

+0

あなたのコードは私のために働きます。 'toString'と' getStatus'はどちらも小文字の文字列を返します。 jsonを構築するときに 'name()'を呼び出さないのは本当ですか? – Tobber

+0

@Bittenus、私は小文字の文字列としてデータベースに列挙型を格納しようとします。 – eugenes

+0

1.ライブラリを使用して列挙型を解析していますか、それとも自分自身を解析していますか? 2. 'name()'または 'toString'を使ってデータベースの列挙を解析するコードはありますか? – Tobber

答えて

7

javax.persistence.AttributeConverter<YourEnum, String>を実装@Converterで注釈が付けconverterクラスを、書きます。 2つの方法があります:

public String convertToDatabaseColumn(YourEnum attribute){..} 
public YourEnum convertToEntityAttribute(String dbData) {..} 

そこにあなたの大文字/小文字のロジックを適用することができます。

後で、与えられたコンバータを使用するためにフィールドに注釈を付けることができます。

+1

ありがとう、ケント。それが私を助けました。私はそれを検索しなければならなかったので、完了するだけです:コンバータを使用するフィールドに注釈を付けると、次のようになります: '@ Colum' ' @Convert(converter = YourEnumConverter.class) ' – Buka

+0

@Buka right!また、 '@Convert'を使用する場合は' @Enumerated'を削除する必要があります。それ以外の場合はconverterは無視されます – kiedysktos

0

ベストプラクティスは列挙型定数の大文字を使用することです。

私は2つのオプション

  1. 利用列挙型で小文字(ない良い練習)
  2. 変更下部ケースを返すために、この列挙型を使用して、Beanのgetterメソッド(getStatusメソッド)を参照してください。 (可能な限り最高のオプション)
+0

getterメソッドでは、Status列挙を返します。戻り値の型をStringに変更し、status.name()。toLowerCase()を返すように実装を変更しますが、効果はありません。申し訳ありません – eugenes

+0

ゲッターメソッドのコードをコピーできますか? –

関連する問題