【问题标题】:Annotation jpa @Query注释 jpa @Query
【发布时间】:2021-01-20 19:49:21
【问题描述】:
我正在学习 jpa 和 hibernate。我在存储库类中看到:
@Query(value = "FROM AccountTable")
List<Account> findAllAccount();
@Query(value = "FROM AccountTable") 是否等于 select * from AccountTable,没有过滤器?对吗?
【问题讨论】:
标签:
sql
spring
hibernate
jpa
repository
【解决方案1】:
首先@Query不是jpa,而是spring data jpa annotation。
根据休眠documentation:
JPQL 中的 select 语句与 HQL 完全相同,只是 JPQL 需要 select_clause,而 HQL 不需要。
因此,您的问题查询中提到的 HQL 特定语法等于以下 JPQL:
@Query("select a FROM AccountTable a")
List<Account> findAllAccount();
请注意,最后一个查询更清晰,建议作为一种良好做法。
尽管 HQL 不需要存在 select_clause,但通常最好包含一个。 对于简单查询,意图很明确,因此 select_clause 的预期结果很容易推断。但对于更复杂的查询,情况并非总是如此。
通常最好明确指定意图。 即使在解析 JPQL 查询时,Hibernate 实际上也不会强制存在 select_clause,但是,对 JPA 可移植性感兴趣的应用程序应该注意这一点。