【问题标题】:When use createQuery() and find() methods of EntityManager?何时使用 EntityManager 的 createQuery() 和 find() 方法?
【发布时间】:2013-03-20 06:06:32
【问题描述】:

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

什么时候使用EntityManager的createQuery()find()方法?

它们各自的优点是什么?

谢谢你回答我。

【问题讨论】:

  • 你读过Javadoc吗?
  • @Zutty 是的,我有,但我不太了解。

标签: java jpa entitymanager


【解决方案1】:

当您想通过主键查找实体时,您使用find。这意味着您确切地知道您在寻找什么,您只想将其从数据库中提取出来。

当您想要使用条件查找实体或者想要使用 JPQL 语句来定义您返回的内容时,您可以使用 createQuery。因此,当您想要获取匹配某些条件的实体或实体集合时,您将使用查询。

【讨论】:

  • 感谢您的回复。那么两者的优势是相同的。所以取决于我要搜索的内容。不错的帖子链接。 :-)
  • 如果我错了,请纠正我,但 .find() 会命中二级缓存,而 createQuery 不会
  • @Broccoli:createQuery 使用查询缓存,见vladmihalcea.com/how-does-hibernate-query-cache-work
【解决方案2】:

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 的实体。

【讨论】:

  • @Andriel 很高兴我能帮助您,您还有什么挥之不去的问题吗?
  • 目前一切正常!谢谢 !! :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
  • 2016-05-02
  • 1970-01-01
  • 1970-01-01
  • 2015-12-15
  • 2011-03-08
相关资源
最近更新 更多