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");

第二个查询似乎缩小了搜索范围,但我不知道它是否更快。

如果您能给我一个建议,我将不胜感激。

4

2 回答 2

2

如果你想找房子,你不需要查询一个人。所以第一个选项。您的第二个选项有一个额外的要求 - 拥有那所房子的特定人。

一般而言 - 通过主键查找总是比通过查询更快(除非查询也只是通过主键)

于 2012-06-23T15:53:44.183 回答
0

当你创建一个 SQLqurey 时,它总是会创建一个新的对象,连接打开数据库,但是在通过主键通过 JPA 搜索它时,JPA 默认为主键创建 SQL 索引,我们知道索引用于高效搜索,所以它总是比直接在数据库上触发查询更快、更有效。因此,为了获得更好的性能和速度,请始终使用 _em.find(class,primary_key) 而不是创建查询。

于 2012-07-17T07:15:15.413 回答