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