[英]Does Spring Data Jpa supports repository inheritance and how to do?
我有一個由以下內容組成的簡單實體繼承樹:
abstract class Item (id, ...)
class Chart extends Item (...)
class Table extends Item (...)
每個類都有自己的存儲庫: ItemRepository
, ChartRepository
和TableRepository
。 這三個存儲庫都已暴露 。
由於域規則的原因,我需要在刪除時實現自定義邏輯,如下所述: http : //docs.spring.io/spring-data/jpa/docs/1.10.3.RELEASE/reference/html/#repositories.custom -實現
這種自定義刪除邏輯涉及繼承樹中的所有實體(抽象的兩個實體)。
有沒有辦法在ItemRepository
上實現自定義邏輯並使ItemRepository
的存儲庫擴展ItemRepository
?
這將避免對繼承樹的每個實體重復相同的邏輯。 沒有這個,就會產生很多樣板類:
EntityRepository
+ EntityRepositoryCustom
+ EntityRepositoryImpl
x 3 entities
= 9 classes
僅用於實現要在刪除時執行的1 ligne代碼...
編輯
用戶的答案user7398104
讓我上實行事情解釋的方式在這里和那里 ,但論文資源沒有解釋如何實現在一個自定義的庫@NoRepositoryBean
基礎庫。 我沒有運氣就嘗試了以下方法:
@NoRepositoryBean
public interface ItemBaseRepository<T extends Item> extends
CrudRepository<T, Integer>,
ItemBaseRepositoryCustom<T>
@RepositoryRestResource
public interface ItemRepository extends ItemBaseRepository<Item> {}
@RepositoryRestResource
public interface ChartRepository extends ItemBaseRepository<Item> {}
@RepositoryRestResource
public interface TableRepository extends ItemBaseRepository<Item> {}
public interface ItemBaseRepositoryCustom<T extends Item> {
public void delete (T i);
}
public class ItemBaseRepositoryImpl<T extends Item>
implements ItemBaseRepositoryCustom<T> {
public void delete (T i) {
// Custom logic
}
}
編輯編輯
我試圖設置@NoRepositoryBean
到ItemBaseRepositoryCustom的意見的建議,但它不工作的。
您可以創建擴展ItemRepository接口的ItemRepositoryCustom接口,每個圖表和表格存儲庫都可以擴展ItemRepositoryCustom存儲庫。 對於此接口,您可以為刪除操作添加自定義實現。
編輯 :我只是意識到這將無法正常工作。
但是以下方法會起作用。
interface CustomItemRepository<T extends Item> extends CrudRepository<T, Long>{ }
interface ChartRepository extends CustomItemRepository<Chart>{ }
interface TableRepository extends CustomItemRepository<Table>{ }
然后,您可以為CustomItemRepository創建用於刪除邏輯的類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.