如何在重写的spring-data方法中调用默认实现

时间:2018-08-09 10:15:37

标签: spring-data spring-data-elasticsearch

首先,这不是Spring Data: Override save method的重复 。我想覆盖save方法,并且知道在哪里找到documentation,但是我的问题是如何在自定义代码中调用原始实现。

要在spring-data- *中覆盖save()方法,请执行以下操作:

interface CustomizedSave<T> {
  <S extends T> S save(S entity);
}

class CustomizedSaveImpl<T> implements CustomizedSave<T> {

  public <S extends T> S save(S entity) {
    // Your custom implementation
  }
}

interface UserRepository extends CrudRepository<User, Long>, CustomizedSave<User> {
}

interface PersonRepository extends CrudRepository<Person, Long>, CustomizedSave<Person> {
}

我的问题是如何调用save()的“超级”实现?在spring-data-elasticsearch中,默认的save()实现不是那么简单设置(基本上我需要复制AbstractElasticsearchRepository源代码),所以我宁愿不这样做。

1 个答案:

答案 0 :(得分:0)

@Autowired
private EntityManager em;

@Override
public User save(User entity) {
    JpaRepositoryFactory jrf = new JpaRepositoryFactory(em);
    UserRepositories repoWithoutCustom = jrf.getRepository(UserRepositories.class);
do somth....
}

repoWithoutCustom所需的位置,UserRepository无需任何自定义方法。只需使用所需的RepositoryFactory,就您所知,就使用Elastic