我有一个简单的实体继承树,由以下组成:
UploadedFile::latest()->distinct()->get();
每个类都有自己的存储库:abstract class Item (id, ...)
class Chart extends Item (...)
class Table extends Item (...)
,ItemRepository
和ChartRepository
。所有三个存储库都暴露。
由于域规则,我需要在删除时实现自定义逻辑,如下所述:http://docs.spring.io/spring-data/jpa/docs/1.10.3.RELEASE/reference/html/#repositories.custom-implementations
此自定义删除逻辑涉及继承树中的所有实体(抽象的一个和两个混凝土)。
有没有办法在TableRepository
上实现自定义逻辑,并使子实体的存储库扩展ItemRepository
?
这将避免对继承树的每个实体重复相同的逻辑。如果没有这个,就会产生许多样板类:
ItemRepository
+ EntityRepository
+ EntityRepositoryCustom
x EntityRepositoryImpl
= 3 entities
只是为了实现删除时要执行的1个代码...
编辑
用户9 classes
的答案让我按照here和there的说明实现了一些事情,但这些资源没有解释如何在{{{{}}上实现自定义存储库1}}基础库。我没有运气就尝试了以下内容:
user7398104
编辑编辑
我尝试按照评论中的建议将@NoRepositoryBean
设置为ItemBaseRepositoryCustom,但它也不起作用。
答案 0 :(得分:0)
您可以创建扩展ItemRepository接口的ItemRepositoryCustom接口,每个图表和表repos扩展ItemRepositoryCustom repo。对于此接口,您可以为删除操作设置自定义。
编辑:我刚才意识到这不起作用。
但是以下方法可行。
interface CustomItemRepository<T extends Item> extends CrudRepository<T, Long>{
}
interface ChartRepository extends CustomItemRepository<Chart>{
}
interface TableRepository extends CustomItemRepository<Table>{
}
然后,您可以为CustomItemRepository创建一个删除逻辑类。