2017-10-20 1 views
0

は、我々が永続化する必要がある3つのドメインクラスがあるとしましょう:Spring MVCでどのようにドメインオブジェクトを構築するのが適切ですか?

class House{ 
    private List<Room> rooms; 
    private Address address; 
} 

class Room{ 
    private String id; 
    ... 
} 

class Address{ 
    private String id; 
    ... 
} 
  1. ドメインオブジェクトは、IDフィールドを持たなければなりませんか?
  2. もしあれば、それは問題の先頭で行われているようにHouseクラスを実現するか、オブジェクトフィールドを軽度のStringにidsを含むものに置き換えますか?

    クラスハウス{ プライベートリスト< 'String> roomIds; プライベートString addressId; }

ありがとうございました!

+1

参照として文字列を使用しないでください。例えばオブジェクトを使用する。 「部屋」、「住所」など – Lino

答えて

0

はい、データベース内の各エンティティの一意性を提供する必要があるため、各ドメインオブジェクトにはIDが必要です。 Idの種類は、使用するデータベースによって異なります。 SQLデータベースを使用する場合、通常はlong型です。 MongoDbを使用している場合、それはStringです。

クラスハウス{プライベートリスト<「文字列> roomIds。プライベートString addressId; }

あなたはIDのリストを使用しないでください。それは悪い習慣です。代わりにエンティティ間の関係を使用します。 JPAを使用してドメインモデルを構築する方法あなたのケースでは、家と部屋の関係 - OneToMany。特定の家にはたくさんの部屋がありますが、各部屋は1つの家にしか属していないからです。アドレスの場合...これはOneToOneの関係です。各住所には一戸建て(フラット)があります。ハウスに埋め込み可能なオブジェクトとしてアドレスを使用することができます。

class House{ 
    private long houseId; 
    private List<Room> rooms; 
    private Address address; 
} 

class Room{ 
    private int roomId; 
    private House house; 
} 

class Address{ 
    private long addressId; 
    ... 
} 
0

は、各クラスには、IDを持っている必要がありますし、自分の使用して休止状態ならば@Idを使用して注釈を付ける必要があります。モデルを設計するときは、2種類のキーを考慮する必要があります。

自然キーをから
(もビジネスキーとして知られている)自然キーはすでに現実の世界に存在する属性から構成されているリレーショナルモデルのデータベース設計で見つかった一意のキーの種類、です。ビジネス関連の列で使用されます。 ...自然なキーはドメインキーと呼ばれることもあります。

代理キー - サロゲートキーとは、「実際の」キーまたはナチュラルキーの代わりにプライマリキーとして宣言できる列または列のセットです。時にはいくつかの自然なキーが存在することがあります。

関連する問題