JPA——命名查询与查询

Roa*_*oam 6 sql jpa

执行 SQL 查询的一种方法是在 JPA 中定义的NamedQuery :

Query query = entityManager.createNamedQuery("Users.findByName");
Run Code Online (Sandbox Code Playgroud)

另一种方法是在不定义NamedQuery 的情况下运行它:

Query query = entityManager.createQuery("SELECT SELECT u FROM Users u");
Run Code Online (Sandbox Code Playgroud)

据我所知,NamedQuery是有利的,因为它在实体类中一处定义,并且可供使用它的 pojo 使用,而无需进入 SQL。

两者之间有什么区别吗?

Koi*_*oer 5

唯一的区别是,一个是一个字符串,只能在声明的类中使用,即第二个示例中的一个

Query query = entityManager.createQuery(" SELECT u FROM Users u");
Run Code Online (Sandbox Code Playgroud)

NamedQueries 可以在不同的 DAO 中使用,无需再次定义它们,只需调用,PersistenceProvider 将@NamedQueries - @NamedQuery在您定义它们时使用 , 或 xml 文件找到它们。

基本上,命名查询是组织查询定义和提高应用程序性能的强大工具。

另外一个重要的事情是,某些提供程序在启动时处理命名查询内的 JPQL,这会对性能造成影响,在您在问题中设置的第二种情况下,持久性提供程序不知道查询的存在,并且不会执行没有机会在启动时处理它,需要在需要时运行该进程。