JavaEE:找到实体的好方法是什么?

时间:2012-06-23 15:44:48

标签: java database java-ee jpa entity

假设我有以下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 个答案:

答案 0 :(得分:2)

如果您想找房子,则无需查询人员。所以第一个选择。您的第二个选项还有一个额外的要求 - 拥有该房屋的特定人员。

总的来说 - 通过主键查询比查询查询总是更快(除非查询也只是主键)

答案 1 :(得分:0)

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