Avatar
0
VuVo Beginner
VuVo Beginner
Spring JPA
Hiện e đang sửa máy nên em ko test được thực tế. cho e hỏi hàm YEAR() trong spring data jpa để trong @Query như vậy có hoạt động không ạ, em đang dùng spring boot 3.3.x và db postgresql ạ

@Query("SELECT trans FROM Transaction trans WHERE YEAR(trans.tDate) = :year ")

Page findByYear(@Param("year") int year, Pageable pageable);

  • Answer
Remain: 5
2 Answers
Avatar
tvd12 Beginner
tvd12 Beginner
The Best Answer
Nếu em dùng hibernate thì ok, nhưng không khuyến khích dùng cách này em ạ, vì nó không tương thích với mọi framework cài đặt jpa vì YEAR không phải là hàm tiêu chuẩn của JPQL.
  • 0
  • Reply
e dùng dêpndency spring data-jpa thì vẫn có hibernate. Vậy em dùng hàm đó trong @Query như vậy vẫn hoạt động đúng không anh. Nếu chuyển qua cái khác thì cho e hỏi nên dùng cái gì ạ  –  VuVo 1743348759000
Avatar
tvd12 Beginner
tvd12 Beginner
Em có thể dùng kiểu:
@Query("SELECT trans FROM Transaction trans WHERE trans.tDate BETWEEN :startDate AND :endDate")
List<Transaction> findByYear(@Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate);

Sau đó truyền vào:

findByYear(LocalDate.of(year, 1, 1), LocalDate.of(year, 12, 31));

Nó vẫn đảm bảo hiệu năng từ index mà lại sử dụng được các framework khác nhau.

  • 0
  • Reply