【发布时间】:2017-03-14 08:41:56
【问题描述】:
我目前正在将一个以 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 数据存储库
@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,但不会扩展自定义的。
【问题讨论】:
标签: java spring-data-jpa