【问题标题】:How to call default implementation in overriden spring-data method如何在覆盖的spring-data方法中调用默认实现
【发布时间】:2019-01-16 18:19:47
【问题描述】:

首先,这不是Spring Data: Override save method 的重复。我想重写保存方法,我知道在哪里可以找到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源码),所以我宁愿不这样做。

【问题讨论】:

  • 在问题显示的代码中,应该在哪里调用super.save(...)?是否尝试拨打super.save(...)?如果不是,是什么阻止了它;如果是,面临什么问题?这个问题目前的形式似乎还不清楚。

标签: spring-data spring-data-elasticsearch


【解决方案1】:
@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

【讨论】:

  • 您的答案是关于 spring-data-jpa。我对所有 spring-data 风格的通用解决方案更感兴趣。在 JPA 中,您只需调用 EntityManager.save(),但在 spring-data-elasticsearch 中,它似乎并不那么简单。
  • 您是否尝试过:只需创建new ElasticsearchRepositoryFactory(template)(模板为ElasticsearchTemplate)并获取所需的存储库?
猜你喜欢
  • 2020-08-10
  • 2015-03-13
  • 1970-01-01
  • 2014-07-07
  • 2018-09-14
  • 2018-06-13
  • 2010-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多