with name error entitymanagerfactory creating bean java spring spring-mvc

java - name - UnsatisfiedDependencyException: Error al crear bean con nombre



entitymanagerfactory spring boot error (12)

Durante varios días estoy intentando crear la aplicación Spring CRUD. Estoy confundido. No puedo resolver estos errores.

org.springframework.beans.factory.UnsatisfiedDependencyException: Error al crear bean con el nombre ''clientController'': dependencia insatisfecha expresada a través del parámetro ''setClientService'' del método; la excepción anidada es org.springframework.beans.factory.UnsatisfiedDependencyException: Error al crear bean con el nombre ''clientService'': dependencia insatisfecha expresada a través del campo ''clientRepository''; la excepción anidada es org.springframework.beans.factory.NoSuchBeanDefinitionException: No hay ningún bean calificado del tipo ''com.kopylov.repository.ClientRepository'' disponible: se espera al menos 1 bean que califique como candidato autowire. Anotaciones de dependencia: {@ org.springframework.beans.factory.annotation.Autowired (required = true)}

y esto

org.springframework.beans.factory.UnsatisfiedDependencyException: Error al crear bean con el nombre ''clientService'': dependencia insatisfecha expresada a través del campo ''clientRepository''; la excepción anidada es org.springframework.beans.factory.NoSuchBeanDefinitionException: No hay ningún bean calificado del tipo ''com.kopylov.repository.ClientRepository'' disponible: se espera al menos 1 bean que califique como candidato autowire. Anotaciones de dependencia: {@ org.springframework.beans.factory.annotation.Autowired (required = true)}

Controlador de cliente

@Controller public class ClientController { private ClientService clientService; @Autowired @Qualifier("clientService") public void setClientService(ClientService clientService){ this.clientService=clientService; } @RequestMapping(value = "registration/add", method = RequestMethod.POST) public String addUser(@ModelAttribute Client client){ this.clientService.addClient(client); return "home"; } }

ClientServiceImpl

@Service("clientService") public class ClientServiceImpl implements ClientService{ private ClientRepository clientRepository; @Autowired @Qualifier("clientRepository") public void setClientRepository(ClientRepository clientRepository){ this.clientRepository=clientRepository; } @Transactional public void addClient(Client client){ clientRepository.saveAndFlush(client); } }

Repositorio del cliente

public interface ClientRepository extends JpaRepository<Client, Integer> { }

Revisé muchas preguntas similares, pero ninguna respuesta a ellas no puede ayudarme.


Acabo de agregar la anotación @Repository a la interfaz del repositorio y @EnableJpaRepositories ("domain.repositroy-package") a la clase principal. Funcionó bien


Agregue la anotación @Repository al repositorio de Spring Data JPA


El ClientRepository debe anotarse con la etiqueta @Repository . Con su configuración actual, Spring no escaneará la clase y no tendrá conocimiento de ella. En el momento del arranque y el cableado no encontrará la clase ClientRepository.

EDITAR Si agregar la etiqueta @Repository no ayuda, entonces creo que el problema podría estar ahora con ClientService y ClientServiceImpl .

Intente anotar el ClientService (interfaz) con @Service . Como solo debe tener una implementación única para su servicio, no necesita especificar un nombre con el parámetro opcional @Service("clientService") . Spring lo generará automáticamente en función del nombre de la interfaz.

Además, como mencionó Bruno, el @Qualifier no es necesario en ClientController ya que solo tiene una implementación única para el servicio.

ClientService.java

@Service public interface ClientService { void addClient(Client client); }

ClientServiceImpl.java (opción 1)

@Service public class ClientServiceImpl implements ClientService{ private ClientRepository clientRepository; @Autowired public void setClientRepository(ClientRepository clientRepository){ this.clientRepository=clientRepository; } @Transactional public void addClient(Client client){ clientRepository.saveAndFlush(client); } }

ClientServiceImpl.java (opción 2 / preferido)

@Service public class ClientServiceImpl implements ClientService{ @Autowired private ClientRepository clientRepository; @Transactional public void addClient(Client client){ clientRepository.saveAndFlush(client); } }

ClientController.java

@Controller public class ClientController { private ClientService clientService; @Autowired //@Qualifier("clientService") public void setClientService(ClientService clientService){ this.clientService=clientService; } @RequestMapping(value = "registration", method = RequestMethod.GET) public String reg(Model model){ model.addAttribute("client", new Client()); return "registration"; } @RequestMapping(value = "registration/add", method = RequestMethod.POST) public String addUser(@ModelAttribute Client client){ this.clientService.addClient(client); return "home"; } }


Eso podría suceder porque los pojos que está utilizando carecen del constructor preciso que necesita el servicio. Es decir, intente generar todos los constructores para el pojo u objetos (objeto modelo) que utiliza su cliente de servicio, para que el cliente pueda ser instanciado correctamente. En su caso, regenere los constructores (con argumentos) para su objeto cliente (este es su objeto modelo).


Intente agregar @EntityScan (basePackages = "inserte el nombre del paquete aquí") sobre su clase principal.


La aplicación debe ubicarse en el mismo directorio que el paquete escaneado:


Me enfrentaba al mismo problema, y ​​lo fue, ya que no pude marcar mi clase DAO con anotaciones de Entidad. Lo intenté a continuación y el error se resolvió.

/** *`enter code here` */ @Entity <-- was missing earlier public class Topic { @Id String id; String name; String desc; . . . }


Según la documentation debe establecer la configuración XML:

<jpa:repositories base-package="com.kopylov.repository" />


Si describe un campo como criterio en la definición del método ("findBy"), debe pasar ese parámetro al método, de lo contrario obtendrá la excepción "Dependencia insatisfecha expresada a través del parámetro del método".

public interface ClientRepository extends JpaRepository<Client, Integer> { Client findByClientId(); ////WRONG !!!! Client findByClientId(int clientId); /// CORRECT }

* Supongo que su entidad cliente tiene un atributo clientId.


Teniendo en cuenta que la exploración de su paquete se establece correctamente a través de la configuración XML o la configuración basada en anotaciones.

También necesitará un @Repository en su implementación de ClientRepository para permitir que Spring lo use en un @Autowired . Como no está aquí, solo podemos suponer que eso es lo que falta.

Como nota al margen, sería más limpio poner su @Autowired / @Qualifier directamente en su miembro si el método de establecimiento solo se usa para @Autowired .

@Autowired @Qualifier("clientRepository") private ClientRepository clientRepository;

Por último, no necesita el @Qualifier ya que solo hay una clase que implementa la definición del bean, por lo que, a menos que tenga varias implementaciones de ClientService y ClientRepository , puede eliminar el @Qualifier


Tuve exactamente el mismo problema, con un rastro de pila muy muy largo. Al final del rastro vi esto:

InvalidQueryException: el espacio de claves ''mykeyspace'' no existe

Creé el espacio de teclas en Cassandra, y resolví el problema.

CREATE KEYSPACE mykeyspace WITH REPLICATION = { ''class'' : ''SimpleStrategy'', ''replication_factor'' : 1 };


Verifique la estructura de la tabla de la tabla del Cliente, si hay una falta de coincidencia entre la estructura de la tabla en db y la entidad, obtendría este error ...

Tuve este error que venía debido a la falta de coincidencia del tipo de datos de la clave principal entre la tabla db y la entidad ...