Spring - NoSuchBeanDefinitionException при автоматическом подключении репозитория в сервис - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь автоматически связать репозиторий с сервисом, который вызывается из контроллера, но я получаю следующее сообщение об ошибке:

Error creating bean with name 'mktPlace2PedidoService' defined in VFS resource [\"/home/davidgarcia/wildfly-11.0.0.Final/standalone/deployments/issuer.war/WEB-INF/classes/br/com/sinergico/service/mktplace2/MktPlace2PedidoService.class\"]: Unsatisfied dependency expressed through constructor argument with index 0 of type [br.com.sinergico.repository.mktplace2.MktPlace2PedidoRepository]: No qualifying bean of type [br.com.sinergico.repository.mktplace2.MktPlace2PedidoRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [br.com.sinergico.repository.mktplace2.MktPlace2PedidoRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}

Странно то, что у меня есть много других репозиториев, используемых вточно так же, но без этой проблемы ...

Вот мой вызов репозитория в конструкторе Сервис

package br.com.sinergico.service.mktplace2;

@Service
public class MktPlace2PedidoService extends GenericService<MktPlace2Pedido, Long> {

    private MktPlace2PedidoRepository repository;

    @Autowired
    public MktPlace2PedidoService(MktPlace2PedidoRepository repository) {
        super(repository);
        this.repository = repository;
    }

    //other methods
}

Вот Репозиторий

package br.com.sinergico.repository.mktplace2;

public interface MktPlace2PedidoRepository extends JpaRepository<MktPlace2Pedido, Long> {
    //some methods   
}

А вот и объявление Entity

package br.com.entity.mktplace2;

@Entity
@Table(name="pedido", schema = "marketplace")
@SequenceGenerator(name="hibernate_sequence",    sequenceName="marketplace.hibernate_sequence",initialValue=1, allocationSize=1)
public class MktPlace2Pedido implements Serializable{

    private static final long serialVersionUID = 45381343130121532L;

    @Id
    @Column(name="id")
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "hibernate_sequence")
    private Long id;

    //other columns

}

Я пытался включить аннотацию @Repository в репозиторий, но это не такничего не делать.

Кто-нибудь может помочь?Я потратил на это часы и не могу понять ...


РЕДАКТИРОВАТЬ - РЕШЕНИЕ

Благодаря davidxxx проблема была решена.Я пропустил пакет внутри @EnableJpaRepositories, теперь он выглядит примерно так:

@EnableJpaRepositories(basePackages = { ... ,"br.com.sinergico.repository.mktplace2", ... })

Ответы [ 3 ]

0 голосов
/ 22 мая 2018

Вы не создали ни одного компонента вашего MktPlace2PedidoRepository.Аннотируйте свой интерфейс с помощью @Repository.Другой вариант: используйте @EnableJpaRepositories ("br.com.sinergico.repository"), чтобы предоставить Spring информацию о том, где найти классы репозитория для создания bean-компонентов

.
0 голосов
/ 23 мая 2018

Эта аннотация:

@EnableJpaRepositories(basePackages = ...)

включит репозитории JPA в соответствии со значением, заданным для атрибута basePackages.
Обычно его можно использовать двумя способами:

  • либо вы указываете одно значение String, соответствующее пакету, либо родительскому пакету, в котором объявлены ваши JpaRepository s.
  • или вы указываете несколько значений String, которые соответствуют каждому пакету каждого из ваших JpaRepository s.

На самом деле, вы, похоже, используете вторую стратегию, так как она работает для некоторых репозиториев, но не для этой.Таким образом, вы должны явно добавить пакет этого репозитория:

@EnableJpaRepositories(basePackages = { ... ,"br.com.sinergico.repository.mktplace2", ... })

Обратите внимание, что первый способ (используя одно значение как basePackages) должен быть максимально предпочтительным, поскольку он позволяет добавлять / удалятьнового репозитория без необходимости обновления аннотации basePackages.

0 голосов
/ 22 мая 2018

Добавить аннотацию @Repository для интерфейса репозитория MktPlace2PedidoRepository

Также

Удалить конструктор из MktPlace2PedidoService и добавить @Autowired для поля Репозиторий

...