Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate select*其中id=:id和entity manager find()之间的差异_Hibernate_Jpa_Eclipselink_Hql_Jpql - Fatal编程技术网

Hibernate select*其中id=:id和entity manager find()之间的差异

Hibernate select*其中id=:id和entity manager find()之间的差异,hibernate,jpa,eclipselink,hql,jpql,Hibernate,Jpa,Eclipselink,Hql,Jpql,我都知道 EntityManager.createQuery("select e from Entity e where e.id = :id") 以及: 返回相同的结果,但我真的想知道它们之间的区别。它们也生成相同的SQL 在某些情况下,可能会生成不同的SQL,但没有发现任何不同 区别在于它们在不同情况下如何帮助您,但仅限于代码级别: createQuery需要一个JPQL/HQL才能工作。id列名或实体名的任何更改都将影响查询字符串。find方法不会遇到相同的问题 您需要更多的样板代码来

我都知道

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


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

它们也生成相同的SQL

在某些情况下,可能会生成不同的SQL,但没有发现任何不同

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

  • createQuery
    需要一个JPQL/HQL才能工作。
    id
    列名或实体名的任何更改都将影响查询字符串。
    find
    方法不会遇到相同的问题
  • 您需要更多的样板代码来处理
    createQuery
    Query
    类、调用
    setParameter
    方法、查询字符串等)
em.find()如果实体已加载到一级缓存中,则不会执行任何查询。
EntityManager.find(Entity.class,id)