进行SQL查询的一种方法是在JPA中定义 NamedQuery :
Query query = entityManager.createNamedQuery("Users.findByName");
另一种方法是在不定义 NamedQuery 的情况下运行它:
Query query = entityManager.createQuery("SELECT SELECT u FROM Users u");
从我看到的, NamedQuery 是有利的,因为它在实体类中的一个地方定义,并且可用于有用的pojo而无需进入SQL 。
两者之间有什么不同吗?
答案 0 :(得分:2)
唯一的区别是one是一个只能在声明的类中使用的String,这是你的第二个例子
Query query = entityManager.createQuery(" SELECT u FROM Users u");
NamedQueries可以在不同的DAO中使用而无需再次定义它们,只需调用,PersistenceProvider将在您定义它们时使用@NamedQueries - @NamedQuery
或xml文件找到它们。
基本上,命名查询是组织查询的强大工具 定义并提高应用程序性能。
另一个很重要的事情是,某些提供程序在启动时处理了namedqueries中的JPQL,这给性能带来了打击,在你设置的第二种情况下,持久性提供程序不知道查询存在并且没有机会在启动时处理它并且需要在需要时运行该过程。