我的存储库类通过使用标准方法名findByxxx来使用查询。它还使用NativeSearchQueryBuilder进行自定义查询。
由于search((方法已从ElasticsearchRepository中删除,我将创建相应的类来使用ElasticsearchOperations。我的代码如下。
@Repository
public interface BookRepository extends ElasticsearchRepository<Book, String> {
public Optional<Book> findById(String bookId);
//default public Page<Book> fetchBooksForUser(String userId, Pageable pageable) {...}
}
@Service
public class BookOperation{ //new class
@Autowired
private ElasticsearchOperations elasticsearchOperations;
public Page<Book> fetchBooksForUser(String userId, Pageable pageable) {..use elasticsearchOperations...}
}
@Service
public class BookServiceImpl implements BookService {
@Autowired
private BookRepository bookRepository;
@Autowired
private BookOperation bookOperation;
//some methods use bookRepository, some methods use formsPackageOperation
}
我有20多个知识库类。我不想重复这20次。有更好的方法吗?
您只需要创建一个存储库片段,请查看https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#repositories.custom-实现。
在接口中定义所需的方法,在Impl
文件中实现必要的逻辑——只需将ElasticsearchOperations
注入实现类即可。
至于现有存储库中的更改:您只需要将自定义接口添加到implements
子句中。