上篇,我們提到每個 Entity 通常對應到一個資料表,而 Repository 在後端框架中即是資料存取層,負責與資料庫互動。以歷史推薦紀錄 RecommendationHistoryRepository
來看,Spring Data JPA 可自動產生 CRUD 操作,只需繼承 JpaRepository
:
public interface RecommendationHistoryRepository extends JpaRepository<RecommendationHistory, Long> {
List<RecommendationHistory> findByUserOrderByCreatedAtDesc(User user);
}
Spring Data JPA是Spring框架家族中的一員,建立於Java Persistence API(JPA)的基礎上,使其能夠專注於簡化數據持久層的開發。
另外,Repository 可自訂查詢方法(例如 findByUserOrderByCreatedAtDesc),直接取得某用戶的歷史推薦紀錄,並依建立時間排序或分頁:
List<RecommendationHistory> findByUserOrderByCreatedAtDesc(User user);
List<RecommendationHistory> findByUserOrderByCreatedAtDesc(User user, Pageable pageable);
List<RecommendationHistory> findByUserAndCreatedAtAfterOrderByCreatedAtDesc(User user, LocalDateTime after);
能用 JPQL(如 @Query
標註)或原生 SQL 進行複雜查詢:
@Query("SELECT COUNT(r) FROM RecommendationHistory r WHERE r.user = ?1")
long countByUser(User user);
@Query("SELECT AVG(r.userRating) FROM RecommendationHistory r WHERE r.user = ?1 AND r.userRating IS NOT NULL")
Double getAverageRatingByUser(User user);
每個 Entity 通常對應一個 Repository,讓 Service 層能方便取得、儲存、更新、刪除資料,提升資料存取效率與維護性。
串接 AI Agent 時,Service 層可透過 Repository 取得過去的推薦紀錄、計算評分、分析使用者行為等,將資料提供給 AI 基礎模型做為決策或回饋的參考,並讓推薦結果夠容易保存、流通或優化。
參考資料: