Java em.find和em.createQuery之间有什么区别

Java em.find和em.createQuery之间有什么区别,java,jpa,openjpa,Java,Jpa,Openjpa,它们相等吗?如果没有,它们有什么不同?前者可能更快,因为JPA提供者不必解析JPA查询。但是得到的SQL应该完全相同 另外,我认为一些提供者在缓存方面可能会对它们有不同的处理方式——按键缓存和查询缓存 最后,使用find(),API更令人愉快—它要么返回单个条目,要么返回null。后者要么只返回一个结果(getSingleResult()-或抛出),要么返回一个列表(getResultList())。find方法可以从缓存中返回结果,如果本机查询或sql触发器,已更改数据库,但未明确通知Hibe

它们相等吗?如果没有,它们有什么不同?

前者可能更快,因为JPA提供者不必解析JPA查询。但是得到的SQL应该完全相同

另外,我认为一些提供者在缓存方面可能会对它们有不同的处理方式——按键缓存和查询缓存


最后,使用
find()
,API更令人愉快—它要么返回单个条目,要么返回
null
。后者要么只返回一个结果(
getSingleResult()
-或抛出),要么返回一个列表(
getResultList()
)。

find方法可以从缓存中返回结果,如果本机查询或sql触发器,已更改数据库,但未明确通知Hibernate。另一方面,
createQuery
可能直接转到数据库,却找不到结果。另外,如果已创建新实体,如果未启用自动刷新模式,则可能无法使用查询找到该实体。
em.find(Enity.classs, Id)

em.createQuery("SELECT e From Entity e WHERE e.Id=:id")