sql注解jpa@query

nwsw7zdq  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(604)

我正在学习jpa和hibernate。我在repository类中看到:

@Query(value = "FROM AccountTable")
List<Account> findAllAccount();

@Query(value = "FROM AccountTable") 等于a select * from AccountTable ,没有过滤器?对吗?

qyuhtwio

qyuhtwio1#

首先, @Query 不是jpa,而是spring数据jpa注解。
根据hibernate文档:
jpql中的select语句与hql完全相同,只是jpql需要 select_clause 而hql没有。
因此,问题查询中提到的hql特定语法等于以下jpql:

@Query("select a FROM AccountTable a")
List<Account> findAllAccount();

请注意,最后一个查询更清楚,建议作为一个好的做法。
即使hql不需要 select_clause ,这通常是一个很好的做法。对于简单的查询,目的是明确的,因此 select_clause 很容易推断。但对于更复杂的查询,情况并非总是如此。
通常最好明确指定意图。hibernate实际上并不强制存在select\子句,即使在解析jpql查询时也是如此,但是,对jpa可移植性感兴趣的应用程序应该注意这一点。

相关问题