0

2 つのテーブルがあります。プライマリ テーブル Order と、もう 1 つのテーブル Status です。Order には外部キー status_id があります。ステータスは、「完了」、「輸送中」、または「保留中」の文字列の表です。私が通常実装するのは、Order と Status の 2 つのエンティティであり、Order エンティティは外部キーに対して多対 1 のマッピングを行うというのは正しいでしょうか? 多対 1 のマッピングになると私が考える理由は、各注文にはステータスが 1 つしかないためですが、ステータス値は明らかに再利用されるからです (たとえば、さまざまな注文の束が「輸送中」のステータスになる可能性があります)。

ただし、追加の質問が 1 つあります。「ステータス」テーブルは、文字列列が 1 つだけで行が 3 つの単純なテーブルになるため、Hibernate で簡単に実装する方法はありますか? それは実際にエンティティである必要がありますか、それとも使用できる値ベースのマッピングはありますか?

また、マッピングベース(XML)の例を作成してください...注釈などではなく、休止状態のマッピングファイルを使用しています。

4

1 に答える 1

0

ステータス テーブルが文字列のみの場合は、status_id を注文テーブルの文字列に折りたたみ、Enum を使用してさまざまなステータスをエンコードすることをお勧めします。追加の getter メソッドを追加して、ステータスの代わりに Enum を返すことができます。あなたの列挙型クラスでは、説明的な文字列を持つことができ、それらを名詞、動詞などとして持つことができます.

この目的で Eclipse で使用する enum テンプレートの例を次に示します。

public enum Status {

COMPLETE("complete"),
IN_TRANSIT("In transit"); // You can add others here.

private String _id;


private Status(String id) {
    _id = id;
}

private static Map<String, Status> _enumById = new HashMap<String, Status>();

    static {
        for (${enclosing_type} type : values()) {
             _enumById.put(type.getId(), type);
        }
    }


    public String getId() {
        return _id;
    }


    public static Status findById(String id) {
        return _enumById.get(id);
    }
}
于 2013-01-14T21:15:20.673 に答える