Я впервые пробую String JPA.
Я следил за видео на Youtube сэра Дургеша.
Это ошибка
Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.jpa.dao.UserRepository' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:351)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:342)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1177)
at com.jpa.demo.BootjpaApplication.main(BootjpaApplication.java:13)
Ниже приведены мои файлы
BootjpaApplication.java (содержит main)
package com.jpa.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import com.jpa.dao.UserRepository;
import com.jpa.entities.user;
@SpringBootApplication
public class BootjpaApplication {
public static void main(String[] args) {
ApplicationContext context= SpringApplication.run(BootjpaApplication.class, args);
UserRepository userrepo= context.getBean(UserRepository.class);
user user=new user();
user.setName("Varun Dhawan");
user.setCity("Paris");
user.setStatus("happy");
user user1= userrepo.save(user);
System.out.println(user1);
}
user.java (есть 4 переменные. id генерируется автоматически. Остальные 3 имеют геттеры и сеттеры.
package com.jpa.entities;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class user {
@Id
@GeneratedValue(strategy =GenerationType.AUTO)
private int id;
private String name;
private String city;
private String status;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public user(int id, String name, String city, String status) {
super();
this.id = id;
this.name = name;
this.city = city;
this.status = status;
}
public user() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "user [id = " + id + ", name = " + name + ", city = " + city + ", status = " + status + "]";
}
}
UserRepository.java
package com.jpa.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.jpa.entities.user;
@Repository
public interface UserRepository extends JpaRepository<user,Integer> {
}
Application.properties
spring.datasource.name=jpa
spring.datasource.url=jdbc:mysql://localhost:3306/jpa
spring.datasource.username=root
spring.datasource.password=root@123
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
spring.jpa.hibernate.ddl-auto=update
Спасибо!
@crizzis UserRespository находится в com.jpa.dao, BootjpaApplication — в com.jpa.demo, user.java — в com.jpa.entities. Что вы подразумеваете под корневым пакетом?
Я понял. @crizzis Большое спасибо
Похоже, ваши пакеты не сканируются должным образом.
Не могли бы вы попробовать добавить @SpringBootApplication(scanBasePackages = "com.jpa")
вместо @SpringBootApplication
.
какое имя пакета для класса BootjpaApplication?
UserRespository находится в com.jpa.dao, BootjpaApplication — в com.jpa.demo, user.java — в com.jpa.entities.
эй, спасибо, что обратили внимание на посылку. Ошибка возникла из-за того, что BootjpaApplication не находится в корневом пакете. Большое спасибо!
просто создайте один пакет (забудьте немного о связи и сделайте это). Затем поместите все классы (POJO, Main) и интерфейс (UserRepository) в этот пакет и перезапустите проект. Это будет работать.
Я вижу, это ваш первый ответ, и это здорово. Но поскольку уже есть принятый ответ, новые ответы должны попытаться улучшить его или, по крайней мере, обновить устаревшую информацию. Ваш ответ, вероятно, сработает, но он немного хакерский и на самом деле не решает проблему в вопросе. Но, пожалуйста, продолжайте в том же духе :)
ваша структура пакета должна быть такой,
com.spring
com.spring.DAO
com.spring.Model
com.spring.View
com.spring.Controller
В файле pom.xml проверяется конфигурация спящего режима и JPA.
Такая же ошибка возникает в моем приложении
Я разрешаю это, добавляя конфигурацию
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Спасибо !
У меня были те же проблемы с репозиторием, который не был найден. Итак, что я сделал, так это переместил все в 1 пакет. И это сработало, а это значит, что с моим кодом все в порядке. Я переместил Repos & Entities в другой пакет и добавил следующее в класс SpringApplication
.
@EnableJpaRepositories("com...jpa")
@EntityScan("com...jpa")
После этого я переместил службу (интерфейс и реализацию) в другой пакет и добавил следующее в класс SpringApplication.
@ComponentScan("com...service")
Это решило мои проблемы.
Пожалуйста, проверьте имя вашего пакета. Имя пакета должно быть иерархическим. нравиться
com.jpa.test
com.jpa.test.dao
com.jpa.test.entities
В каком пакете находится
BootjpaApplication
? Он должен находиться в корневом пакете, чтобы все остальные компоненты могли быть обнаружены при сканировании компонентов.