簡體   English   中英

我可以使用 Spring Data JPA 處理多個實體類的單個 JPA 存儲庫接口嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM