假设我有以下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;
}
假设我正在寻找的房子存在且我同时拥有personID
和houseID
,其中一个应该更快或者花费更少的资源以及为什么?
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");
第二个查询似乎缩小了搜索范围,但我不知道它是否更快。
如果你能给我一个建议,我将非常感激。
答案 0 :(得分:2)
如果您想找房子,则无需查询人员。所以第一个选择。您的第二个选项还有一个额外的要求 - 拥有该房屋的特定人员。
总的来说 - 通过主键查询比查询查询总是更快(除非查询也只是主键)
答案 1 :(得分:0)
创建SQLqurey时,它总是创建一个新对象,连接打开数据库,但在通过主键搜索JPA时, JPA bydefault为主键创建SQL索引,我们知道索引用于高效搜索,因此它总是比直接触发数据库查询更快更有效。 所以为了更好的性能和速度总是使用, 的 _em.find(类,primary_key)强> 而不是创建查询。