2017-02-28 8 views
0

私のデータベースには、1対多数のリストを持つ電子メールキャンペーンがあります。リストには、多数の多数の購読者がいます。Java Spring Hibernate、Runtimeオプションでマッピングを実行しますか?

私が問題を抱えているのは、たとえば、私がキャンペーンを引き出すときに、私はいつもすべての加入者を望んでいないということです(多数の加入者で、異なるキャンペーンを見たいと思うかもしれません)。

マッピングを作成するときに、オプションでマッピングを実行する方法があります(実行時に決定)。あるいは、問題の解決策は何ですか?私はちょうどデータベースからすべてを取り出し、要求された部分を出力すべきですか?オーバーヘッドのように思える。

答えて

1

データモデルの記述方法に基づいて、次のようなマッピングがあると仮定します(フェッチタイプをデフォルトのLAZYのままにしています)。あなたはCampaignエンティティと関連付けられているMailingList関係を取得したい場合は

@Entity 
public class Campaign { 
    // ... 
    @OneToMany 
    private List<MailingList> lists; 
} 

@Entity 
public class MailingList { 
    // ... 
    @ManyToMany 
    private List<Subscriber> subscribers; 
} 

@Entity 
public class Subscriber { 
    // ... 
} 

、あなたは簡単にHQL/JPQLで次のようにそれを行うことができます。

FROM Campaign c JOIN FETCH c.lists 

は、加入者のリストを取得しないことを理由@ManyToManyアソシエーションはデフォルトでは怠惰なので、getSubscribers()を呼び出す場合に限り、フェッチされます。

マッピングでは、常にLAZYを取得してから、適切な結合フェッチをクエリ時に指定して、最も詳細な制御が可能にする必要があります。

関連する問題