3

エンティティは、永続ストレージからのデータにマップされたデータを保持します。通常、これは DB です。

ID を保持できます:

class Book {
    private String title;
    public String getTitleId() { return title; }

    private Long publisherId;   // <==  **it is**!
    public Long getPublisherId() { return publisherId; }

    private List<Long> authorIds;
    public List<Long> getAuthorIds() { return authorIds; }
}

または解決されたエンティティ:

class Book {
    private String title;
    public String getTitleId() { return title; }

    private Publisher publisher;   // <==  **it is**!
    public Publisher getPublisher() { return publisher; }

    private List<Author> authors;
    public List<Author> getAuthors() { return authors; }
}

Hibernate のような ORM を使用する場合、ORM が * join * を関連するエンティティと無料で行うので、解決されたエンティティの操作は簡単です。

しかし、パフォーマンスに関心がある場合、または DB 機能を使用して手動の SQL クエリでロジックを Java から SQL に移動したい場合は、ID を持つエンティティが勝ちます (それらは高速であり、関連する各エンティティを手動で結合するのは面倒です)!

そこで、2 種類のエンティティを維持することにしました。ID を使用するものと、この知識をデータ型 (型名) で保持する解決済みの関連エンティティを使用するものです。

そのため、クラス名に最適なサフィックスを取得するためにグーグルを開始しましたが、適切なキーワードが見つかりません。ID 関連するエンティティをエンティティに保持するための方法論/テクニックの名前の付け方を教えてください!

4

1 に答える 1

3

あなたが探している用語は

熱心な読み込みと遅延読み込みおよびフェッチ戦略

見る

編集:

遅延ロードされたエンティティはproxyと呼ばれ、まだ初期化されていないコレクションはwrapperと呼ばれます。

コメントへの対応: Hibernate one-to-one: getId() without fetching whole object を参照してください。Hibernate は、遅延ロードされたエンティティの ID 値を生成できます。

Hibernate FAQから:

関連付けを取得せずに、関連付けられたオブジェクトの識別子を取得するにはどうすればよいですか?

早くやれよ。次のコードは、アイテムの関連付けが遅延していても、SELECT ステートメントにはなりません。

Long itemId = bid.getItem().getId();

これgetItem()は、プロキシを返し、識別子プロパティを通常のアクセサ メソッドでマップした場合に機能します。Item の id に対する直接フィールド アクセスを有効にした場合、 を呼び出すと Item プロキシが初期化されますgetId()。このメソッドは、プロキシの他のビジネス メソッドと同じように扱われます。呼び出された場合は、初期化が必要です。

于 2013-05-21T13:37:01.517 に答える