我使用了Netgloo博客的这篇文章中描述的解决方案。
这个想法是创建一个通用的存储库类,如下所示:
@NoRepositoryBean
public interface ABaseRepository
extends CrudRepository {
// All methods in this repository will be available in the ARepository,
// in the BRepository and in the CRepository.
// ...
}
然后我可以用这种方式编写三个存储库:
@Transactional
public interface ARepository extends ABaseRepository { /* ... */ }
@Transactional
public interface BRepository extends ABaseRepository { /* ... */ }
@Transactional
public interface CRepository extends ABaseRepository { /* ... */ }
此外,要获得ARepository的只读存储库,我可以将BRepository定义为只读:
@NoRepositoryBean
public interface ABaseRepository
extends Repository {
T findOne(Long id);
Iterable findAll();
Iterable findAll(Sort sort);
Page findAll(Pageable pageable);
}
从BRepository扩展了Spring Data JPA的CrudRepository以实现读/写存储库:
@Transactional
public interface BRepository
extends ABaseRepository, CrudRepository
{ /* ... */ }