执行 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。
两者之间有什么区别吗?
唯一的区别是,一个是一个字符串,只能在声明的类中使用,即第二个示例中的一个
Query query = entityManager.createQuery(" SELECT u FROM Users u");
Run Code Online (Sandbox Code Playgroud)
NamedQueries 可以在不同的 DAO 中使用,无需再次定义它们,只需调用,PersistenceProvider 将@NamedQueries - @NamedQuery在您定义它们时使用 , 或 xml 文件找到它们。
基本上,命名查询是组织查询定义和提高应用程序性能的强大工具。
另外一个重要的事情是,某些提供程序在启动时处理命名查询内的 JPQL,这会对性能造成影响,在您在问题中设置的第二种情况下,持久性提供程序不知道查询的存在,并且不会执行没有机会在启动时处理它,需要在需要时运行该进程。
| 归档时间: |
|
| 查看次数: |
7272 次 |
| 最近记录: |