Java SpringDataJPA支持存储库继承吗?如何做?

Java SpringDataJPA支持存储库继承吗?如何做?,java,spring,spring-data,spring-data-jpa,spring-data-rest,Java,Spring,Spring Data,Spring Data Jpa,Spring Data Rest,我有一个简单的实体继承树,由以下内容组成: 抽象类项(id,…) 类图表扩展项(…) 类表扩展项(…) 每个类都有自己的存储库:ItemRepository、ChartRepository和TableRepository。这三个存储库都是公开的 由于域规则,我需要在delete上实现自定义逻辑,如下所述: 此自定义删除逻辑涉及继承树中的所有实体(抽象实体和两个具体实体) 是否有办法在ItemRepository上实现自定义逻辑,并使子实体的存储库扩展ItemRepository 这将避免对继承

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

抽象类项(id,…)
类图表扩展项(…)
类表扩展项(…)
每个类都有自己的存储库:
ItemRepository
ChartRepository
TableRepository
。这三个存储库都是公开的

由于域规则,我需要在delete上实现自定义逻辑,如下所述:

此自定义删除逻辑涉及继承树中的所有实体(抽象实体和两个具体实体)

是否有办法在
ItemRepository
上实现自定义逻辑,并使子实体的存储库扩展
ItemRepository

这将避免对继承树的每个实体重复相同的逻辑。如果没有这一点,就会产生很多样板类:

EntityRepository
+
EntityRepositoryCustom
+
EntityRepositoryImpl
x
3个实体
=
9个类
只需实现删除时执行的1个代码对齐

编辑

user
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
公共接口ItemBaseRepository扩展
积垢的,
ItemBaseRepositoryCustom
@存储资源
公共接口ItemRepository扩展了ItemBaseRepository{}
@存储资源
公共接口ChartRepository扩展了ItemBaseRepository{}
@存储资源
公共接口TableRepository扩展了ItemBaseRepository{}
公共接口ItemBaseRepositoryCustom{
公共无效删除(T i);
}
公共类ItemBaseRepositoryImpl
实现ItemBaseRepositoryCustom{
公共作废删除(T i){
//自定义逻辑
}
}
编辑编辑


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

您可以创建ItemRepositoryCustom接口,扩展ItemRepository接口,每个图表和表repos都扩展ItemRepositoryCustom repo。对于此接口,您可以自定义删除操作的实现

编辑:我刚刚意识到这行不通

但下面的方法是可行的

接口CustomItemRepository扩展了Crudepository{
}

interface ChartRepository扩展了CustomItemRepository{
}

interface TableRepository扩展了CustomItemRepository{
}


然后,您可以为CustomItemRepository的删除逻辑创建一个类。

我尝试了这个解决方案,但不幸的是,它没有起作用。也许我做错了什么。我尝试使用
ViewRepositoryCustom
接口和
ViewRepositoryImpl
类,并且为了测试,使
chartrepory
接口扩展
ViewRepositoryCustom
。它只在我专门研究了
ViewRepositoryCustom
ViewRepositoryImpl
之后起作用,只需将它们重命名为
ChartRepositoryCustom
ChartRepositoryImpl
。所以我怀疑它是否适用于抽象实体类。嗨,你编辑的答案让我成功了,但我仍然无法实现自定义存储库。请参阅我对该问题的编辑。@NoRepositoryBean此注释应位于ItemBaseRepositoryCustom repo上,因为这是自定义repo,spring不应为此创建代理类,因为单独创建代理类对其没有任何意义。不幸的是,这并没有改变任何内容。从spring官方数据公用项Ref:Hi,谢谢,但这是我在问题上发布的相同链接。我知道如何创建自定义存储库实现,但我一直坚持继承。抱歉@tiben-该死的疏忽!(@Cepr0无需担心您应该在问题中提及或描述您所遇到的确切错误。