此JPA @Query有什么问题?

时间:2020-08-23 17:41:00

标签: sql spring database jpa h2

我有一个Spring Boot应用程序,使用Spring Data JPA与H2数据库连接。我试图在自己的@Query中编写一个JpaRepositories方法,但是它总是返回一个空集合,我不知道为什么。

public interface ProductService extends JpaRepository<Product, Long> {
    @Query(value = "SELECT * FROM product WHERE category=':category'", nativeQuery = true)
    List<Product> getCategory(@Param("category") String category);
}

我仅将这段代码放在上面,因为我确定数据库中存在数据。我已经通过从H2-console运行此完全相同的查询来验证了它,并且每次都有效。这可能是什么问题?

3 个答案:

答案 0 :(得分:0)

使用纯JPA:

List<Product> findAllByCategory(String category);

使用本机查询:

@Query(value="SELECT * FROM product WHERE category=?1;",nativeQuery=true)
List<Product> getAllByCategory(String category);
@Query(value="SELECT * FROM product WHERE category=:category;",nativeQuery=true)
List<Product> getAllByCategory(@Param String category);

我个人将使用JPA版本,因为您将来可能希望使用Spring Paging端点,因此希望将Pageable参数传递到存储库中。

List<Product> findAllByCategory(String category,Pageable page);

答案 1 :(得分:0)

您尝试过

@Query(value = "SELECT * FROM product p WHERE p.category=:category", nativeQuery = true)

https://www.baeldung.com/jpa-query-parameters

答案 2 :(得分:0)

您可以尝试通过为表提供别名并选择相同的别名来代替*,如下所示:

@Query(value = "SELECT p FROM Product p WHERE p.category = :category")
List<Product> getCategory(@Param("category") String category);