Не удалось автоматически подключить sessionFactory в моей загрузочной демонстрации Spring.Ошибка создания компонента "sessionFactory": неразрешимая циклическая ссылка - PullRequest
0 голосов
/ 19 сентября 2018

Спасибо, что помогли мне разобраться.

Я начал с простой демонстрации "Привет, мир", и с самого начала она работала нормально.Затем я попытался внедрить sessionFactory hibernate в моем классе BaseDao, используя эту конфигурацию yml:

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/myboot1?useUnicode=true&characterEncoding=UTF-8
    username: root
    password: kenny

  jpa: 
    properties: 
      hibernate: 
        current_session_context_class: org.springframework.orm.hibernate5.SpringSessionContext

, и это мой класс конфигурации:

@Configuration
@EnableAutoConfiguration
@EnableTransactionManagement
public class HibernateConfig {

  @Bean 
  public SessionFactory sessionFactory(EntityManagerFactory factory) { 
    if (factory.unwrap(SessionFactory.class) == null) { 
    throw new NullPointerException("noooooooooooo!"); 
  } 
    return factory.unwrap(SessionFactory.class); 
  } 
}

, и я получил эту ошибку:

org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'sessionFactory': 
   Requested bean is currently in creation: Is there an unresolvable circular reference?
The dependencies of some of the beans in the application context form a cycle:



***************************

APPLICATION FAILED TO START
***************************

Description:

helloController (field com.kennywgx.boot2.service.UserService com.kennywgx.boot2.controller.HelloController.service)
      ↓
   userService (field private com.kennywgx.boot2.dao.UserDao com.kennywgx.boot2.service.UserService.dao)
      ↓
   userDao (field private org.hibernate.SessionFactory com.kennywgx.boot2.dao.BaseDao.sessionFactroy)
┌─────┐
|  sessionFactory defined in class path resource [com/kennywgx/boot2/HibernateConfig.class]
└─────┘

Я не понимаю, почему пружинный контейнер создал его циркулярно.Кто-нибудь знает почему?

код UserDao.java

@Repository
public class UserDao extends BaseDao {

}

BaseDao

@Repository
public class BaseDao {
    @Autowired
    private SessionFactory sessionFactory;

    public Session getCurrSession() {
        return sessionFactory.getCurrentSession();
    }
}
...