进行 SQL 查询的一种方法是在 JPA 中定义的 NamedQuery:
Query query = entityManager.createNamedQuery("Users.findByName");
另一种方法是在不定义 NamedQuery 的情况下运行它:
Query query = entityManager.createQuery("SELECT SELECT u FROM Users u");
从我看来,NamedQuery 是有利的,因为它在实体类中的一个地方定义,并且可用于无需进入 SQL 即可使用它的 pojo。
两者之间有什么区别吗?
最佳答案
唯一的区别是一个字符串只能在声明的类中使用,第二个示例之一
Query query = entityManager.createQuery(" SELECT u FROM Users u");
NamedQueries 可以在不同的 DAO 中使用而无需再次定义它们,只需调用 PersistenceProvider 就会使用
@NamedQueries - @NamedQuery
找到它们。 , 或 xml 文件时定义它们。Basically a named queries are a powerful tool for organizing query definition and improving application performance.
还有一个重要的事情是,某些提供程序在启动时处理了命名查询中的 JPQL,这对性能造成了影响,在您在问题中设置的第二种情况下,持久性提供程序不知道查询的存在并且确实没有机会在启动时处理它,需要在需要时运行该进程。
关于sql - JPA——命名查询与查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22370688/