我正在学习jpa和hibernate。我在repository类中看到:
@Query(value = "FROM AccountTable") List<Account> findAllAccount();
是 @Query(value = "FROM AccountTable") 等于a select * from AccountTable ,没有过滤器?对吗?
@Query(value = "FROM AccountTable")
select * from AccountTable
qyuhtwio1#
首先, @Query 不是jpa,而是spring数据jpa注解。根据hibernate文档:jpql中的select语句与hql完全相同,只是jpql需要 select_clause 而hql没有。因此,问题查询中提到的hql特定语法等于以下jpql:
@Query
select_clause
@Query("select a FROM AccountTable a") List<Account> findAllAccount();
请注意,最后一个查询更清楚,建议作为一个好的做法。即使hql不需要 select_clause ,这通常是一个很好的做法。对于简单的查询,目的是明确的,因此 select_clause 很容易推断。但对于更复杂的查询,情况并非总是如此。通常最好明确指定意图。hibernate实际上并不强制存在select\子句,即使在解析jpql查询时也是如此,但是,对jpa可移植性感兴趣的应用程序应该注意这一点。
1条答案
按热度按时间qyuhtwio1#
首先,
@Query
不是jpa,而是spring数据jpa注解。根据hibernate文档:
jpql中的select语句与hql完全相同,只是jpql需要
select_clause
而hql没有。因此,问题查询中提到的hql特定语法等于以下jpql:
请注意,最后一个查询更清楚,建议作为一个好的做法。
即使hql不需要
select_clause
,这通常是一个很好的做法。对于简单的查询,目的是明确的,因此select_clause
很容易推断。但对于更复杂的查询,情况并非总是如此。通常最好明确指定意图。hibernate实际上并不强制存在select\子句,即使在解析jpql查询时也是如此,但是,对jpa可移植性感兴趣的应用程序应该注意这一点。