Неудовлетворенная зависимость выражается через поле employeeDao; - PullRequest
0 голосов
/ 27 июня 2019
I am fresh to spring boot and currently facing this error in STS

"Error creating bean with name 'employeeDao': Unsatisfied dependency expressed through field 'sessionfactory'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException"
Entity Class

@Entity
@Table(name = "studenttable")
public class Employee {



@Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;
    @Column(name = "sname")
    private String sname;
    @Column(name = "scourse")
    private String cname;
    @Column(name = "sfee")
    private Double fee;
Hibernate Utils Class
    @Configuration
    public class HibernateUtilsConfig {

        @Autowired
        private EntityManagerFactory entityManagerFactory;

        @Bean
        public SessionFactory getSessionFactoty() {
            if(entityManagerFactory.unwrap(SessionFactory.class)== null) {
                throw new NullPointerException("Factory Not Found");
            }
            return entityManagerFactory.unwrap(SessionFactory.class);
        }
DAO Class
@Repository
public class EmployeeDao {

    @Autowired
    private SessionFactory sessionfactory;

    public void createEmployee(Employee employee) {
        Session session = null;
        try {
            session = sessionfactory.openSession();
            session.beginTransaction();
        Integer id=(Integer)    session.save(employee);
        System.out.println("The record is add in the system" + id);
            session.getTransaction().commit();
        }catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }
Main Class
@SpringBootApplication
public class SpringExampleApplication implements CommandLineRunner {

    @Autowired
    private EmployeeDao employeeDao;

    public static void main(String[] args) {
        SpringApplication.run(SpringExampleApplication.class, args);
    }
    @Override
    public void run(String... args) throws Exception {
        Employee employee = getEmployee();
        employeeDao.createEmployee(employee);

    }
    private Employee getEmployee() {
        Employee employee = new Employee();
        employee.setSname("Imran");
        employee.setCname("Java");
        employee.setFee(1000d);
        return employee;
    }

**Error Log**

org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка создания бина с именем springExampleApplication: неудовлетворенная зависимость, выраженная через поле employeeDao; вложенное исключение - org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка при создании компонента с именем employeeDao: неудовлетворенная зависимость, выраженная через поле 'sessionfactory'; вложенное исключение org.springframework.beans.factory.UnsatisfiedDependencyException: Ошибка при создании bean-компонента с именем 'hibernateUtilsConfig': неудовлетворенная зависимость, выраженная через поле entityManagerFactory; Вложенное исключение - org.springframework.beans.factory.BeanCurrentlyInCreationException: Ошибка создания компонента с именем 'getSessionFactoty': Запрашиваемый компонент в данный момент находится в процессе создания: существует неразрешимая циклическая ссылка? at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject (AutowiredAnnotationBeanPostProcessor.java:596) ~ [spring-beans-5.1.8.RELEASE.jar: 5.1.8] RELE в org.springframework.beans.factory.annotation.InjectionMetadata.inject (InjectionMetadata.java:90) ~ [spring-beans-5.1.8.RELEASE.jar: 5.1.8.RELEASE] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties (AutowiredAnnotationBeanPostProcessor.java:374) ~ [spring-beans-5.1.8.RELEASE.jar: 5.1.8.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean (AbstractAutowireCapableBeanFactory.java:1411) ~ [spring-beans-5.1.8.RELEASE.jar: 5.1.8.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:592) ~ [spring-beans-5.1.8.RELEASE.jar: 5.1.8.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:515) ~ [spring-beans-5.1.8.RELEASE.jar: 5.1.8.RELEASE] в org.springframework.beans.factory.support.AbstractBeanFactory.lambda $ doGetBean $ 0 (AbstractBeanFactory.java:320) ~ [spring-beans-5.1.8.RELEASE.jar: 5.1.8.RELEASE] в org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:222) ~ [spring-beans-5.1.8.RELEASE.jar: 5.1.8.RELEASE] в org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:318) ~ [spring-beans-5.1.8.RELEASE.jar: 5.1.8.RELEASE] в org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:199) ~ [spring-beans-5.1.8.RELEASE.jar: 5.1.8.RELEASE] в org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons (DefaultListableBeanFactory.java:845) ~ [spring-beans-5.1.8.RELEASE.jar: 5.1.8.RELEASE] в org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization (AbstractApplicationContext.java:877) ~ [spring-context-5.1.8.RELEASE.jar: 5.1.8.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java:549) ~ [spring-context-5.1.8.RELEASE.jar: 5.1.8.RELEASE] в org.springframework.boot.SpringApplication.refresh (SpringApplication.java:742) [spring-boot-2.1.6.RELEASE.jar: 2.1.6.RELEASE] в org.springframework.boot.SpringApplication.refreshContext (SpringApplication.java:389) [spring-boot-2.1.6.RELEASE.jar: 2.1.6.RELEASE] в org.springframework.boot.SpringApplication.run (SpringApplication.java:311) [spring-boot-2.1.6.RELEASE.jar: 2.1.6.RELEASE] в org.springframework.boot.SpringApplication.run (SpringApplication.java:1213) [spring-boot-2.1.6.RELEASE.jar: 2.1.6.RELEASE] вorg.springframework.boot.SpringApplication.run (SpringApplication.java:1202) [spring-boot-2.1.6.RELEASE.jar: 2.1.6.RELEASE] в com.imran.works.SpringExampleApplication.main (SpringExampleApplication.java:18) [classes /: na] Причина: org.springframework.beans.factory.UnsatisfiedDependencyException: Ошибка при создании bean-компонента с именем employeeDao: неудовлетворенная зависимость, выраженная через поле 'sessionfactory';Вложенное исключение - org.springframework.beans.factory.UnsatisfiedDependencyException: Ошибка при создании bean-компонента с именем 'hibernateUtilsConfig': Неудовлетворенная зависимость, выражаемая через поле entityManagerFactory;Вложенное исключение - org.springframework.beans.factory.BeanCurrentlyInCreationException: Ошибка создания компонента с именем 'getSessionFactoty': Запрашиваемый компонент в данный момент находится в процессе создания: существует неразрешимая циклическая ссылка?at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor $ AutowiredFieldElement.inject (AutowiredAnnotationBeanPostProcessor.java:596) ~ [spring-beans-5.1.8.RELEASE.jar: 5.1.8.ra.work.be.RelEfactory.annotation.InjectionMetadata.inject (InjectionMetadata.java:90) ~ [spring-beans-5.1.8.RELEASE.jar: 5.1.8.RELEASE]

Пожалуйста, помогите мне,

Спасибо!

1 Ответ

0 голосов
/ 28 июня 2019

Проблема, с которой вы столкнулись, связана с предоставленным вами классом конфигурации HibernateUtilsConfig.java. В вашем классе EmployeeDao вы автоматически подключаете компонент sessionfactory.Таким образом, когда springboot пытается автоматически подключить bean-компонент, происходит сбой со следующей ошибкой:

Unsatisfied dependency expressed through field 'sessionfactory'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'hibernateUtilsConfig': Unsatisfied dependency expressed through field 'entityManagerFactory'; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'getSessionFactoty': Requested bean is currently in creation: Is there an unresolvable circular reference?

, так как bean-компонент entityManagerFactory недоступен.

Поскольку вы используете spring-boot, выможет не все настроить вручную.Вы можете использовать автоматические настройки по умолчанию из spring-boot, добавив следующую зависимость:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

, затем вы можете предоставить соответствующие ключи в application.properties или application.yml, и spring-boot настроит вседля тебя.

application.properties

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=mysqluser
spring.datasource.password=mysqlpass
spring.datasource.url=jdbc:mysql://localhost:3306myDb?createDatabaseIfNotExist=true

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

   @Bean
   public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
      LocalContainerEntityManagerFactoryBean em 
        = new LocalContainerEntityManagerFactoryBean();
      em.setDataSource(dataSource());
      em.setPackagesToScan(new String[] { "com.example.persistence.model" });

      JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
      em.setJpaVendorAdapter(vendorAdapter);
      em.setJpaProperties(additionalProperties());

      return em;
   }

Справочник Документация .

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