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

The difference between select * where id = :id and entity manager find()

我都知道

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

和:

EntityManager.find(Entity.class,id)

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

它们也生产相同的 SQL。

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

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

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