Spring data 在SpringDataJPA中,是否可以为不同的实体使用一个公共存储库

Spring data 在SpringDataJPA中,是否可以为不同的实体使用一个公共存储库,spring-data,Spring Data,例如,我有一些实体,如汽车、个人、客户。 我需要像findBy这样的通用方法,在我的存储库类中使用规范。 我不想为每个实体编写不同的存储库。 是否可以为所有实体创建一个公共存储库并在我的应用程序中使用它。 如何创建具有不同实体类型的存储库实例。 如果您的代码结构为: @MappedSuperclass class AbstractEntity implements Serializable {} @Entity class Car extends AbstractEntity {}

例如,我有一些实体,如汽车、个人、客户。 我需要像findBy这样的通用方法,在我的存储库类中使用规范。 我不想为每个实体编写不同的存储库。 是否可以为所有实体创建一个公共存储库并在我的应用程序中使用它。 如何创建具有不同实体类型的存储库实例。
如果您的代码结构为:

@MappedSuperclass class AbstractEntity implements Serializable {}

@Entity class Car      extends AbstractEntity {}

@Entity class Person   extends AbstractEntity {}

@Entity class Customer extends AbstractEntity {}
您可以这样做:

@NoRepositoryBean interface AbstractEntityRepository<T extends AbstractEntity>
                            extends JpaRepository<T, ...>
                                    , JpaSpecificationExecutor<T> {}

interface CarRepository extends AbstractEntityRepository<Car> {}

interface PersonRepository extends AbstractEntityRepository<Person> {}

interface CustomerRepository extends AbstractEntityRepository<Customer> {}
@NoRepositoryBean接口AbstractEntityRepository
扩展JPA假设
,JpaSpecificationExecutor{}
接口CarRepository扩展了AbstractEntityRepository{}
接口PersonRepository扩展了AbstractEntityRepository{}
接口CustomerRepository扩展了AbstractEntityRepository{}

这将使您能够通过
JpaSpecificationExecutor
访问所有存储库中采用
规范的方法。谢谢您的回复。我已经尝试过了。但我担心的是,我需要为每个实体创建单独的存储库,尽管它们都从抽象存储库扩展了方法,在我的应用程序中,我需要根据实体创建每个存储库的实例。有什么办法可以避免这种情况。我自己从未尝试过,也不推荐这样的设计,但您可以尝试从
AbstractEntityRepository
中删除
@NoRepositoryBean
,然后将其作为
@Autowired AbstractEntityRepository carRepository
在使用位置进行布线,等。当我从中删除@NoRepositoryBean时,我总是会收到以下错误:由以下原因引起:org.springframework.data.mapping.PropertyReferenceException:找不到类型Person的属性查询!如果我为抽象存储库提供自定义实现,则不会发生上述错误。但是@Autowired并没有创建存储库的实例。存储库为null,因此我得到null指针异常。