Spring Data Jpa是否支持存储库继承以及如何操作?

时间:2017-01-31 09:20:24

标签: java spring spring-data spring-data-jpa spring-data-rest

我有一个简单的实体继承树,由以下组成:

UploadedFile::latest()->distinct()->get();

每个类都有自己的存储库:abstract class Item (id, ...) class Chart extends Item (...) class Table extends Item (...) ItemRepositoryChartRepository。所有三个存储库都暴露

由于域规则,我需要在删除时实现自定义逻辑,如下所述: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的答案让我按照herethere的说明实现了一些事情,但这些资源没有解释如何在{{{{}}上实现自定义存储库1}}基础库。我没有运气就尝试了以下内容:

user7398104

编辑编辑

我尝试按照评论中的建议将@NoRepositoryBean设置为ItemBaseRepositoryCustom,但它也不起作用。

1 个答案:

答案 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创建一个删除逻辑类。