1. ホーム
  2. java

[解決済み] Hibernateの列挙

2023-06-19 22:51:51

質問

DAOにおいて、その値がJavaの列挙に由来するフィールドを持つことはしばしば有用です。典型的な例はログインDAOで、通常、ユーザーを"NORMAL" または"ADMIN" として特徴付けるフィールドを持っています。Hibernateでは、次の2つのオブジェクトを使用して、このリレーションシップを(半)タイプセーフな方法で表現します。

class User {
    String username;
    String passwd;
    UserType type;
}

class UserType {
    private enum Type {ADMIN, NORMAL};
    private String type;

    //Setters/Getters for Hibernate
    public void setType(String type);
    public String getType();

    //Setters/Getters for user
    public void setUserType(UserType.Type t);
    public UserType.Type getUserType();

    public static UserType fromType(UserType.Type t);
}

これは動作しますが、UserTypeクラスは醜く、いくつかの値を格納するためだけにあまりにも多くの官僚主義を必要とすることがわかります。理想的には、Hibernateは列挙フィールドを直接サポートし、列挙値を格納するための余分なテーブルを作成することです。

私の質問は、Hibernateで列挙クラスを直接マッピングする方法はあるかということです。そうでない場合、列挙を表現するための私のパターンは十分ですか、それとも何か見逃していますか? 人々はどのような他のパターンを使用するのでしょうか?

どのように解決するのですか?

hibernateやJPAのアノテーションを使用する。

class User {
   @Enumerated(EnumType.STRING)
   UserType type
}

UserTypeはjava 5の標準的なenumに過ぎません。

これはアノテーションだけに限ったことではないと思うのですが、実はhbmファイルでこれを行う方法を私は知りません。それは非常にバージョンに依存するかもしれません、私は推測ですが、hibernate 3.2+ が必要であることは間違いないでしょう。

編集: hbmで可能ですが、少し面倒です、これを見てください。 フォーラムスレッド