2014-03-13 72 views
2

导电SQL查询的一种方法是定义NamedQuery在JPA:JPA - 命名查询VS查询

Query query = entityManager.createNamedQuery("Users.findByName"); 

此另一种是运行它而不限定NamedQuery

Query query = entityManager.createQuery("SELECT SELECT u FROM Users u"); 

从我所看到的,NamedQuery有利于它在一个地方参加的所有实体类中定义的,并且可用于具有我们一个POJO因为它没有进入SQL。

两者有什么不同吗?

回答

2

唯一的区别在于,一个是仅可以在被声明的类中使用的字符串,第二个实施例的

Query query = entityManager.createQuery(" SELECT u FROM Users u"); 

的NamedQueries可以在不同的DAO使用而不需要定义的一个他们再次,只要调用,PersistenceProvider会在您定义它们时使用@NamedQueries - @NamedQuery或xml文件来查找它们。

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

也是一个不错的重要的东西是,一些供应商处理的JPQL在启动时namedqueries内,这给对性能有命中,在您在YOUT问题设置第二种情况下,持久性提供不知道的查询存在,并且没有机会在启动时处理它,并且需要时运行该进程。

+0

对于第二种情况,只要在该pojo中需要特定查询(如果涉及到运行时),那么最后一段对于第二种情况可能是有利的,因此不会通过解析所有namedQueries。 – Roam

+0

是的,除非它是一个动态查询,否则这个提供者什么也不能做,我也不确定如果在运行时遇到这种情况,如果查询没有用NamedQuery标记,我会知道这是怎么发生的提供程序不会扫描可以在启动时在POJO中进行查询的字符串 – Koitoer