首页 > 代码库 > [Spring Data Repositories]学习笔记--为repository添加通用的方法
[Spring Data Repositories]学习笔记--为repository添加通用的方法
如果想把一个方法加到所有的repository中,用前一篇提到的方法就不合适了。
英文原版,请看
http://docs.spring.io/spring-data/data-mongo/docs/1.5.2.RELEASE/reference/html/repositories.html#repositories.custom-behaviour-for-all-repositories
1. 定义自己的repository,要从基础的repository进行继承。
public interface MyRepository<T, ID extends Serializable> extends JpaRepository<T,ID> {void sharedCustomMethod(ID id);}
2. 定义repository的实现,也要从基础的repository实现进行继承。
public class MyRepositoryImpl<T,ID extends Serializable> extends SimpleJpaRepository<T,ID> Implements MyRepository<T,ID> {private EntityManager entityManager;public MyRepositoryImpl(Class<T> domainClass, EntityManager entityManager){super(domainClass,entityManager);this.entityManager = entityManager;}public void sharedCustomMethod(ID id){//implementation goes here}}
3. 创建一个repository工厂
public class MyRepositoryFactoryBean<R extends JpaRepository<T, I>, T, I extends Serializable> extends JpaRepositoryFactoryBean<R, T, I> { protected RepositoryFactorySupport createRepositoryFactory(EntityManager entityManager) { return new MyRepositoryFactory(entityManager); } private static class MyRepositoryFactory<T, I extends Serializable> extends JpaRepositoryFactory { private EntityManager entityManager; public MyRepositoryFactory(EntityManager entityManager) { super(entityManager); this.entityManager = entityManager; } protected Object getTargetRepository(RepositoryMetadata metadata) { return new MyRepositoryImpl<T, I>((Class<T>) metadata.getDomainClass(), entityManager); } protected Class<?> getRepositoryBaseClass(RepositoryMetadata metadata) { // The RepositoryMetadata can be safely ignored, it is used by the JpaRepositoryFactory //to check for QueryDslJpaRepository‘s which is out of scope. return MyRepository.class; } }}
4. 使用新创建的factory
<repositories base-package="com.acme.repository" factory-class="com.acme.MyRepositoryFactoryBean"/>
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。