/** * Creates a new {@link CrudRepositoryInvoker} for the given {@link CrudRepository}, {@link RepositoryMetadata} and * {@link ConversionService}. * * @param repository must not be {@literal null}. * @param metadata must not be {@literal null}. * @param conversionService must not be {@literal null}. */ public CrudRepositoryInvoker(CrudRepository<Object, Object> repository, RepositoryMetadata metadata, ConversionService conversionService) { super(repository, metadata, conversionService); CrudMethods crudMethods = metadata.getCrudMethods(); this.customSaveMethod = isRedeclaredMethod(crudMethods.getSaveMethod()); this.customFindOneMethod = isRedeclaredMethod(crudMethods.getFindOneMethod()); this.customDeleteMethod = isRedeclaredMethod(crudMethods.getDeleteMethod()); this.customFindAllMethod = isRedeclaredMethod(crudMethods.getFindAllMethod()); this.repository = repository; }
@Override public void invokeDeleteById(Object id) { if (customDeleteMethod) { super.invokeDeleteById(id); } else { repository.deleteById(convertId(id)); } }
@SuppressWarnings("unchecked") protected RepositoryInvoker createInvoker(RepositoryInformation information, Object repository) { if (repository instanceof PagingAndSortingRepository) { return new PagingAndSortingRepositoryInvoker((PagingAndSortingRepository<Object, Object>) repository, information, conversionService); } else if (repository instanceof CrudRepository) { return new CrudRepositoryInvoker((CrudRepository<Object, Object>) repository, information, conversionService); } else { return new ReflectionRepositoryInvoker(repository, information, conversionService); } } }
@Override @SuppressWarnings("unchecked") public <T> Optional<T> invokeFindById(Object id) { return customFindOneMethod ? super.invokeFindById(id) : (Optional<T>) repository.findById(convertId(id)); }