【问题标题】: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 可移植性感兴趣的应用程序应该注意这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 2017-04-22
    • 2020-01-18
    相关资源
    最近更新 更多