Spring data MongoDB пример не работает - PullRequest
3 голосов
/ 23 марта 2012

Я просто пытаюсь получить пример «Добавление пользовательского поведения во все репозитории» из рабочего справочного документа . Но для следующего класса:

public class MyRepositoryImpl<T, ID extends Serializable>
  extends SimpleJpaRepository<T, ID> implements MyRepository<T, ID> {

  public void sharedCustomMethod(ID id) {
    // implementation goes here
  }
}

Я получаю ошибку компиляции

не найден подходящий конструктор для SimpleJpaRepository ()
Конструктор org.springframework.data.jpa.repository.support.SimpleJpaRepository.SimpleJpaRepository (java.lang.Class, javax.persistence.EntityManager) не применяется
(фактические и формальные списки аргументов различаются по длине)
Конструктор org.springframework.data.jpa.repository.support.SimpleJpaRepository.SimpleJpaRepository (org.springframework.data.jpa.repository.support.JpaEntityInformation, javax.persistence.EntityManager) не применим (фактические и формальные списки аргументов различаются по длине)

Как мне заставить это работать?

Ответы [ 4 ]

0 голосов
/ 30 сентября 2017

Я не соленый, но его реализация, к сожалению, не совсем ясна.

Посмотрите на изображение для полного примера, github: https://github.com/mpereira-dev/spring-data-mongo-shared-repo-example

Ключевые моменты:

  1. Вы должны использовать @ NoRepositoryBean в базовом интерфейсе, чтобы Spring не создавал для него bean-компонент.
  2. Имя базового интерфейса не имеет значения, как для добавления пользовательских методов в один репозиторий.
  3. Имя реализующего класса также не имеет значения
  4. Добавление @ Repository к реализующему классу приведет к следующей ошибке:

Параметр 0 конструктора в com.example.demo.repository.ImplementationRepoNameDoesntMatterEitherUnlikeAddingCustomMethodsToSingleRepo требуется боб типа 'Org.springframework.data.mongodb.repository.query.MongoEntityInformation' это не может быть найдено.

  1. Вы должны использовать:

@ EnableMongoRepositories ( repositoryBaseClass = PracticeRepoNameDoesntMatterEitherUnlikeAddingCustomMethodsToSingleRepo.class)

чтобы сообщить Spring о вашем базовом классе, если вы этого не сделаете, вы получите эту ошибку (spring пытается проанализировать метод в запросе):

Вызвано: org.springframework.data.mapping.PropertyReferenceException: нет найдено свойство someMethod для типа Person!

  1. Убедитесь, что структура вашего пакета соответствует соглашениям Spring, чтобы все ваши компоненты могли быть обнаружены к весне, другие мудро настраивают: @ComponentScan, @EntityScan и @ EnableMongoRepositories.

A picture says a thousand words

7.6.2. Добавление пользовательского поведения во все репозитории

https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#repositories.custom-behaviour-for-all-repositories

0 голосов
/ 16 октября 2012

@Oliver говорил о том, что вы неправильно скопировали / вставили код. Spring-Data-MongoDB Docs скопировал / вставил этот бит кода из Spring-Data-JPA Docs и забыл его изменить. Если вы действительно посмотрите на код, который у вас есть, изменения просты.

public interface MyMongoRepository<T, ID extends Serializable> extends MongoRepository<T, ID> {

    void sharedCustomMethod(ID id);
}


public class MyImplMongoRepository<T, ID extends Serializable> extends SimpleMongoRepository<T, ID> implements MyMongoRepository<T, ID> {

    public void sharedCustomMethod(ID id) {
        // implementation goes here
    }
}

Это ясно? Это была просто опечатка в документах.

0 голосов
/ 26 сентября 2014

Подходящее решение для «Добавление пользовательского поведения во все репозитории» с использованием Spring-data mongodb подробно описано в этом посте .

После выполнения действий, описанных в приведенном выше сообщении, вы можете использовать любой из своих интерфейсов репозитория для расширения настраиваемого интерфейса общего репозитория, как показано ниже

@Repository
public interface CustomerRepository extends MongoRepository<Customer, String>,
        WootideRepositoryCustom<Customer, String> {
}

Реализация, предоставленная в WootideRepositoryImplбудет доступен в CustomerRepository.

Для меня это сработало.

Желаю, чтобы документ dong data mongodb был обновлен, так как это первое место ссылки.

0 голосов
/ 26 марта 2012

Во-первых, это простая ошибка компиляции, поскольку у суперкласса есть конструктор, который вы должны либо скопировать, либо предоставить собственный. Во-вторых, вы, кажется, смешиваете модули JPA и MongoDB. Вы бы предпочли расширить SimpleMongoRepository.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...