当使用EntityManager的createQuery()和find()方法时?
我想知道这些方法之间的区别。
使用EntityManager的createQuery()
和find()
方法时?
他们每个人的优势是什么?
谢谢你的回答。
当您想要通过主键查找实体时,可以使用find
。 这意味着你确切地知道你在寻找什么,你只想把它从数据库中拉出来。
如果要使用条件查找实体,或者要使用JPQL语句定义返回的内容,可以使用createQuery
。 因此,当您想要获得符合某些条件的实体或实体集合时,您将使用该查询。
createQuery
方法允许您创建将要执行的JPQL语句。 允许的JPQL语句比find
执行的语句更具动态性。 例如,给出下表:
create table CAT( cat_id integer, cat_name varchar(40) )
您可以执行查询以按名称查找cat。
entityManager.createQuery("select c from Cat c where c.name = :name");
find
方法仅允许您使用其主键检索对象。 所以要使用上表中的find
方法:
entityManager.find(Cat.class, new Integer(1));
简而言之, createQuery
允许您以更动态的方式检索实体,而find
限制您搜索具有已知ID的实体。