我目前正在将一个使用Hibernate ORM自己管理JPA的应用程序迁移到Spring Boot 2.0.0和Spring Data JPA 2.0.0。该应用程序目前有大约50个实体,每个实体都有自己的数据源,现在我想将它们迁移到Spring Data Repositories。其中许多数据源具有许多相似的功能,例如使用自定义过滤器类进行过滤或通过某种唯一键获取实体而不是其ID。我可以按照Spring Data JPA Reference中描述的实现自定义基类,但这意味着我必须为每个实体提供自定义过滤器,而我只需要为其中的10个提供。是否有可能像下面展示的那样让Spring Data合并多个自定义存储库实现?
请注意,
实体:
@Entity
public class Artist {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
int id;
@Column(unique = true)
int secondaryId;
String name;
... constructors, getter, setter, etc ...
}
@Entity
public class Album {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
int id;
String name;
... constructors, getter, setter, etc ...
}
具有默认实现的自定义存储库:
public interface FilterRepository<T> {
public T findByFilter(Filter<T> t);
}
public class FilterRepositoryImpl<T> implements AdditionalRepository<T> {
public T findByFilter(Filter<T> t) {
... return something ...
}
}
public interface FindByFieldRepository<T> {
public T findByField(String fieldName, Object fieldValue);
}
public class FindByFieldRepositoryImpl<T> implements FindByFieldRepository<T> {
public T findByField(String fieldName, Object fieldValue) {
... return something ...
}
}
Spring Data仓库
@Repository
public interface ArtistRepository extends JpaRepository<Artist, Integer>,
FilterRepository<Artist>, FindByFieldRepository<Artist> {
}
@Repository
public interface AlbumRepository extends JpaRepository<Album, Integer>,
FilterRepository<Album> {
}
请注意,
ArtistRepository
扩展了两个自定义仓库,而 AlbumRepository
仅扩展了 FilterRepository
。另一个仓库可能会扩展 JpaRepository
,但没有任何自定义定义的仓库扩展它们。