当使用EntityManager的createQuery()和find()方法时?

时间:2013-03-29 14:09:44

标签: java jpa entitymanager

我想知道这些方法之间的区别。

何时使用EntityManager的createQuery()find()方法?

他们每个人的优势是什么?

感谢您回答我。

2 个答案:

答案 0 :(得分:12)

如果要按主键查找实体,请使用find。这意味着你确切地知道你在寻找什么,你只想把它从数据库中拉出来。

如果要使用条件查找实体,或者如果要使用JPQL语句定义返回的内容,则使用createQuery。因此,当您想要获得符合某些条件的实体或实体集合时,您将使用该查询。

答案 1 :(得分:10)

createQuery方法允许您创建将要执行的JPQL语句。允许的JPQL语句比find执行的语句更具动态性。例如,如下表所示:

create table CAT(
   cat_id integer,
   cat_name varchar(40)
)

您可以执行查询以按名称查找猫。

entityManager.createQuery("select c from Cat c where c.name = :name");

find方法仅允许您使用其主键检索对象。因此,对上表使用find方法:

entityManager.find(Cat.class, new Integer(1));

简而言之,createQuery允许您以更动态的方式检索实体,而find则限制您搜索具有已知ID的实体。