0

次の 2 つのエンティティがあるとします。

@Entity
public class Person implements Serializable {
    private Long id;
    @OneToMany(fetch=FetchType.LAZY)
    private List<House> houses;
}

@Entity
public class House implements Serializable {
    private Long id;
    private List<House> houses;
}

私が探している家が存在し、 と の両方を持っているpersonIDhouseIDします。次のうち、どちらがより速く、またはリソースのコストが少なくて済みますか?その理由は?

House house = em.find(House.class, id);

また

Query q = em.createQuery("SELECT H FROM Person P JOIN P.houses H 
                          WHERE C.id = :personID AND H.id = :houseID");

2番目のクエリは検索を絞り込むようですが、高速かどうかはわかりませんでした。

アドバイスをいただければ大変助かります。

4

2 に答える 2

2

家を探したい場合は、人を探す必要はありません。したがって、最初のオプションです。2番目のオプションには、追加の要件があります。その家を所有する特定の人です。

一般的な注意点-クエリよりも主キーで検索する方が常に高速です(クエリが主キーだけである場合を除く)

于 2012-06-23T15:53:44.183 に答える
0

SQLquery を作成すると、データベースとの接続 Open で常に新しいオブジェクトが作成されますが、主キーでJPA を検索している間、JPA はデフォルトで主キーの SQL インデックスを作成し、効率的な検索のためにインデックスが使用されることがわかっています。データベースでクエリを直接実行するよりも常に高速で効率的な方法です。したがって、パフォーマンスと速度を向上させる には、クエリを作成する代わりに、常に_em.find(class,primary_key)を使用してください。

于 2012-07-17T07:15:15.413 に答える