em.find和em.createQuery有什么区别

时间:2012-03-01 22:57:19

标签: java jpa openjpa

em.find(Enity.classs, Id)

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

他们是等同的吗?如果没有,它们有何不同?

1 个答案:

答案 0 :(得分:4)

前者可能更快,因为JPA提供程序不必解析JPA查询。但结果SQL应该完全相同。

另外我认为某些提供商可能会在缓存方面对它们采取不同的处理方式 - 通过密钥缓存和查询缓存进行缓存。

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