select * where id =:id和entity manager find()之间的区别

时间:2018-03-28 09:34:44

标签: hibernate jpa eclipselink hql jpql

我知道两者

EntityManager.createQuery("select e from Entity e where e.id = :id")

EntityManager.find(Entity.class,id)

返回相同的结果,但我真的想知道它们之间的区别。

1 个答案:

答案 0 :(得分:3)

他们也生成相同的SQL。

在某些情况下,有discussion关于生成不同SQL的可能性,但没有发现任何不同。

在不同的情况下,差异在于它们如何帮助您,但仅限于代码级别:

  • createQuery需要JPQL / HQL才能运行。 id列名称或实体名称的任何更改都将影响查询字符串。 find方法不会遇到同样的问题。
  • 您需要更多样板代码才能使用createQueryQuery类,调用setParameter方法,查询字符串等)。