我正在開發一個spring-boot-project並使用一個JpaRepository接口。 根據Spring Data JPA - Reference Documentation,可以編寫自定義實現。在Spring Data JPA Repository中使用自定義名稱
這裏是一個顯示我想要做什麼的例子。
我有一個簡單的類客戶:
@Entity
public class Client {
@Id
Long id;
@Column
String name;
@Column
Date since;
// ... methods omitted
}
,該ClientRepository:
public interface ClientRepository extends JpaRepository<Client, Long>, ClientRepositoryCustom {
List<Client> findBySinceBetween(Date start, Date end);
}
,該ClientRepositoryCustom:
public interface ClientRepositoryCustom {
List<Client> getClientsSinceYear(int year);
}
個
終於ClientRepositoryImpl:
@Repository
public class ClientRepositoryImpl implements ClientRepositoryCustom {
@Overwrite
List<Client> getClientsSinceYear(int year) {
// ... implementation details
}
}
我想有一個像getClientsSinceYear(int year)
查詢。
我知道我可以寫這個查詢,像這樣findBySinceBetween(Date start, Date end)
,並通過今年的第一天和最後一天。但我只想傳遞一個參數到函數中。
我在選擇名稱時有哪些自由度? 這甚至可能嗎? 是否有一個觸發詞,如果我想要一個與我的實體的屬性有關的名稱,我必須使用它嗎?
如果我查詢例如爲兩個屬性。它似乎我可以寫一個像findByName(String name, int year)
這樣的方法,但我寧願沒有一個與方法名稱無關的附加參數的方法。
在此先感謝,任何反饋表示讚賞!
這似乎工作。對於這個解決方案,我不需要* ClientRepositoryCustom *,這沒關係。但是如果我想在實現中「隱藏」查詢細節,那麼沒有解決方案,或者? – morecore
有可能將命名的查詢放到orm.xml中,但我喜歡@Query的解決方案,它也爲其他開發人員提供了一些透明性。從我所見過的最佳實踐中直接將這些查詢放入存儲庫。 – FireGnome