![](/img/trans.png)
[英]Spring Data JPA How to create single repository for two domain classes implementing a common interface?
[英]Can I have a single JPA repository interface handling multiple entity classes using Spring Data JPA?
我不太喜歡Spring Data JPA ,我在處理Spring Boot項目時遇到了以下問題。
我對如何正確處理這種情況有以下架構上的疑問:
我有一個由這樣的接口實現的存儲庫,我在其中定義了我的“查詢方法”:
public interface ExcelRepository extends CrudRepository<Country, Integer> {
public List<Country> findAllByOrderByCountryNameAsc();
public List<BlockAttackDetail> findAllByOrderByAttackTypeAcronymAsc();
}
正如您所看到的,我正在擴展CrudRepository接口,並指定了一個名為 **Country* 的模型類來映射我的數據庫中的特定表。
我添加了第二種方法,用於映射不同數據庫表的另一個實體類 ( BlockAttackDetail )。
因此,啟動我的應用程序時出現此錯誤,因為此存儲庫僅適用於Country實體類映射的數據庫表:
Caused by: org.springframework.data.mapping.PropertyReferenceException: No property attackTypeAcronym found for type Country!
我的問題是:我是要創建多個 JPA 存儲庫接口(每個實體一個)還是存在一種方法可以讓單個 JPA 存儲庫接口處理多個實體類?
在我的特定情況下,我將有幾個方法可以與特定的數據庫表(與一個實體)交互,我更喜歡有一個單一的存儲庫接口來處理多個實體類(以避免混淆)。
我能以某種方式做到嗎? 如果我能做到從架構的角度來看是有意義的,還是最好為每個實體類有一個特定的 JPA 存儲庫接口?
根據 Spring Data 文檔,您應該為每個實體擁有一個存儲庫
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.definition
在您的情況下,完成工作的唯一方法是使用 Spring Data JPA:
public interface CountryRepository extends CrudRepository<Country, Integer> {
public List<Country> findAllByOrderByCountryNameAsc();
}
public interface BlockAttackDetailRepository extends CrudRepository<BlockAttackDetail, Integer> {
public List<BlockAttackDetail> findAllByOrderByAttackTypeAcronymAsc();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.