select * where id = :id 和实体管理器 find() 的区别

M.A*_*ell 5 hibernate jpa hql eclipselink jpql

我知道两者

EntityManager.createQuery("select e from Entity e where e.id = :id")
Run Code Online (Sandbox Code Playgroud)

和:

EntityManager.find(Entity.class,id)
Run Code Online (Sandbox Code Playgroud)

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

Dhe*_*rik 3

他们也产生相同的 SQL。

有人讨论过在某些情况下生成不同 SQL 的可能性,但没有发现任何不同。

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

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