2017-02-22 24 views
1

Моя недавняя цель - создать весеннее загрузочное приложение, но без каких-либо файлов конфигурации XML (или как можно меньше), поэтому я хотел бы избежать использования некоторых XML-файлов (например, web.xml), особенно для некоторые части определения компонента.Конфигурация на основе аннотации Hibernate SessionFactory

И здесь идет более жесткая часть.

Я хочу, чтобы ввести с помощью @Autowired аннотации к SessionFactory боба на классы, но каждый раз, когда я пытаюсь запустить приложение, я получаю:

org.springframework.beans.factory.UnsatisfiedDependencyException: Ошибка при создании боба с именем ' temperatureController ': неудовлетворенная зависимость, выраженная через поле «sessionFactory»; Вложенное исключение - org.springframework.beans.factory.BeanCreationException: ошибка при создании компонента с именем sessionFactory: FactoryBean выбрал исключение для создания объекта; вложенное исключение java.lang.IllegalStateException: EntityManagerFactory не должен быть пустым

Хорошо, я понимаю, что весна не SessionFactory фасоли, потому что он не имеет EntityManagerFactory.

Так что я был бы признателен за любые предложения, как это решить, но только с настройкой аннотаций.

До сих пор я читал подобный пост помоему об указании в классе @Configuration боб этот путь:

@Bean 
public HibernateJpaSessionFactoryBean sessionFactory() { 
    return new HibernateJpaSessionFactoryBean(); 
} 

И затем добавить эту строку в файл свойств:

spring.jpa.properties .hibernate.current_session_context_class = org.springframework.orm.hibernate4.SpringSessionContext

И, наконец, @Autowired с SessionFactory должен работать хорошо. Но, конечно, для меня это не работает.

Любые идеи, что мне делать другим/лучше?

Мои свойства файла очень простой:

spring.jpa.show-SQL = верно spring.datasource.password = MySQL spring.datasource.username = MySQL spring.datasource.testWhileIdle = истина spring.jpa.hibernate.ddl-авто = обновление spring.datasource.validationQuery = ВЫБРАТЬ 1 spring.datasource.url = JDBC: MySQL: // локальный: 3306/SYS spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.Imp rovedNamingStrategy spring.jpa.properties.hibernate.current_session_context_class = org.springframework.orm.hibernate4.SpringSessionContext

ответ

2

Обычно, когда я хочу, чтобы определить что-то простое я делаю класс, который похож на следующее:

@Configuration 
@EnableTransactionManagement 
public class PersistanceJpaConfig { 

    @Bean 
    public LocalSessionFactoryBean hibernateSessionFactory(DataSource dataSource) { 
     LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); 
     sessionFactory.setDataSource(dataSource); 
     sessionFactory.setPackagesToScan(new String[] { 
        "my.entities.package" 
     }); 
     sessionFactory.setHibernateProperties(additionalProperties()); 

     return sessionFactory; 
    } 

    @Bean HibernateTransactionManager transactionManager(SessionFactory sessionFactory) { 
     HibernateTransactionManager transactionManager = new HibernateTransactionManager(); 
     transactionManager.setSessionFactory(sessionFactory); 

     return transactionManager; 
    } 

    @Bean 
    public DataSource dataSource(){ 
     DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
     dataSource.setDriverClassName("com.mysql.jdbc.Driver"); 
     dataSource.setUrl("jdbc:mysql://localhost:3306"); 
     dataSource.setUsername("user"); 
     dataSource.setPassword("password"); 
     return dataSource; 
    } 

    Properties additionalProperties() { 
     Properties properties = new Properties(); 
     properties.setProperty("hibernate.hbm2ddl.auto", "update"); 
     properties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL57InnoDBDialect"); 
     return properties; 
    } 

} 

С помощью @EnableTransactionManagement и создания боба типа LocalSessionFactoryBean, весна будет автоматически создавать SessionFactory bean для вас, что вы можете вставлять/autowire где угодно.

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

Смежные вопросы