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
方法不会遇到同样的问题。
- 您需要更多样板代码才能使用
createQuery
(Query
class、调用 setParameter
方法、查询字符串等)。
我都知道
EntityManager.createQuery("select e from Entity e where e.id = :id")
和:
EntityManager.find(Entity.class,id)
returns同样的结果,但是,我真的很想知道它们之间的区别。
它们也生产相同的 SQL。
有一个
区别在于它们在不同情况下如何帮助您,但仅限于代码级别:
createQuery
需要 JPQL/HQL 才能工作。id
列名称或实体名称的任何更改都会影响查询字符串。find
方法不会遇到同样的问题。- 您需要更多样板代码才能使用
createQuery
(Query
class、调用setParameter
方法、查询字符串等)。