sql - JPA——命名查询与查询

标签 sql jpa

进行 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/

相关文章:

sql - 在 SQL 2005 中更改聚集索引 (PK) 的最佳方法

sql - 将带毫秒的日期时间插入 SQL Server 表问题

hibernate - java.lang.VerifyError : Expecting a stackmap frame at branch. .. JPA+postgresql 错误

jpa - 如何与JPA查询进行时间戳比较?

java - Hibernate缓存和MySql查询缓存

sql - 几个查询中出现相同的SQL错误

sql - Oracle 分析函数 - 使用 FIRST_VALUE 删除不需要的行

java - JPA删除双向实体

java - Hibernate JPA 联合继承

sql - PostgreSQL 和队列命令