2017-02-19 6 views
0

Я хочу использовать sessionfactory в весенней загрузке и спящем режиме 5.2.6 после того, как попробовал какое-то решение, я пытаюсь использовать LocalSessionFactoryBuilder для этого, но я получаю это исключение. мой источник данных инъекционные пружинными загрузки .i не знаю, почемуНевозможно развернуть запрос типа [javax.sql.DataSource]

@Configuration 
@EnableTransactionManagement 
public class DatabaseConfiguration { 

    @Inject 
    public DataSource dataSource; 

    @Inject 
    public JpaProperties prop; 

    @Bean 
    public SessionFactory sessionFactory() { 
     LocalSessionFactoryBuilder builder = new LocalSessionFactoryBuilder(dataSource); 
     builder.scanPackages("or.roshan"); 
     builder.setProperties(getHibernateProperties()); 
     return builder.buildSessionFactory(); 
    } 


    private Properties getHibernateProperties() { 
     Properties properties = new Properties(); 
     properties.put("hibernate.show_sql", "true"); 
     properties.put("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect"); 
     properties.put("hibernate.current_session_context_class", "org.springframework.orm.hibernate5.SpringSessionContext"); 
     return properties; 
    } 


    @Bean 
    public HibernateTransactionManager transactionManager(@Autowired SessionFactory sessionFactory) { 
     HibernateTransactionManager transactionManager = new HibernateTransactionManager(); 
     transactionManager.setSessionFactory(sessionFactory); 
     return transactionManager; 
    } 

} 

Я получаю это исключение

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in class path resource [org/roshan/framework/config/DatabaseConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.service.UnknownUnwrapTypeException: Cannot unwrap to requested type [javax.sql.DataSource] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:737) 
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:370) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:314) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1162) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1151) 
    at org.roshan.uaa.UaaApplication.main(UaaApplication.java:20) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) 
Caused by: org.hibernate.service.UnknownUnwrapTypeException: Cannot unwrap to requested type [javax.sql.DataSource] 
    at org.hibernate.engine.jdbc.connections.internal.UserSuppliedConnectionProviderImpl.unwrap(UserSuppliedConnectionProviderImpl.java:38) 
    at org.springframework.orm.hibernate5.SessionFactoryUtils.getDataSource(SessionFactoryUtils.java:198) 
    at org.springframework.orm.hibernate5.HibernateTransactionManager.afterPropertiesSet(HibernateTransactionManager.java:353) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) 
    ... 21 common frames omitted 

ответ

1

Я не знаю, где вы получили этот совет, но это выглядит странно для меня. Если вы хотите разоблачить SessionFactory, вы должны сделать что-то вроде этого:

@Configuration 
public class MyConfig { 

    @Bean 
    public SessionFactory sessionFactory(EntityManagerFactory factory) { 
    if (factory.unwrap(SessionFactory.class) == null) { 
     throw new NullPointerException("factory is not a hibernate factory"); 
    } 
    return entityManagerFactory.unwrap(SessionFactory.class); 
    } 
} 
Смежные вопросы