是否可以在Spring数据JPA中为不同的实体使用一个公共存储库

时间:2015-02-27 11:12:18

标签: spring-data

例如,我有Car,Person,Customer等实体。 我需要在我的存储库类中使用规范的findBy这样的泛型方法。 我不想为每个实体编写不同的存储库。 是否可以为所有实体创建一个公共存储库并在我的应用程序中使用它。 如何使用不同的实体类型创建存储库的实例。 我目前正在使用弹簧靴进行测试

1 个答案:

答案 0 :(得分:2)

如果您的代码结构为:

@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> {}

这样,您就可以访问通过Specification<EntityType>在您的所有存储库上JpaSpecificationExecutor的方法。