2016-04-29 2 views
0

Я не смог решить свою проблему с другими аналогичными сообщениями. Я пытаюсь использовать Hibernate с Spring Boot. Другие проекты с такой конфигурацией работают нормально. Этого нет. Возможно, один из вас знает, как это исправить.NoSuchBeanDefinitionException: не существует подходящего компонента типа [org.hibernate.SessionFactory] для зависимостей

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.hibernate.SessionFactory] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Qualifier(value=sessionFactory)} 

java.lang.reflect.InvocationTargetException 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:601) 
at org.springframework.boot.maven.AbstractRunMojo$LaunchRunner.run(AbstractRunMojo.java:478) 
at java.lang.Thread.run(Thread.java:722) Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'priceDaoHibernateImpl' defined in file [D:\Sonstiges\Entwicklung\Projekte\gatrinWS\target\classes\de\xxx\gatrinws\persistence\PriceDaoHibernateImpl.class]: Unsatisfied dependency expressed through constructor argument with index 0 of type [org.hibernate.SessionFactory]: No qualifying bean of type [org.hibernate.SessionFactory] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Qualifier(value=sessionFactory)}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.hibernate.SessionFactory] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Qualifier(value=sessionFactory)} 
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749) 
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:185) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1143) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1046) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
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:772) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) 
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) 
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766) 
at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361) 
at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) 
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1191) 
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1180) 
at de.xxx.gatrinws.Application.main(Application.java:10) 
... 6 more Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.hibernate.SessionFactory] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Qualifier(value=sessionFactory)} 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1373) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1119) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014) 
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:813) 
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741) 
... 25 more 

Это моя конфигурация

<context:component-scan base-package="de.xxx.gatrinws"/> 

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
     <list> 
      <value>classpath:global.properties</value> 
     </list> 
    </property> 
    <property name="ignoreUnresolvablePlaceholders" value="true"/> 
    <property name="ignoreResourceNotFound" value="true"/> 
    <property name="placeholderPrefix" value="${"/> 
</bean> 

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 
    <property name="driverClass" value="${jdbc.driverClassName}"/> 
    <property name="jdbcUrl" value="${jdbc.url}"/> 
    <property name="user" value="${jdbc.username}"/> 
    <property name="password" value="${jdbc.password}"/> 
    <property name="acquireIncrement" value="${c3p0.acquireIncrement}"/> 
    <property name="minPoolSize" value="${c3p0.minPoolSize}"/> 
    <property name="maxPoolSize" value="${c3p0.maxPoolSize}"/> 
</bean> 

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource"> 
     <ref local="dataSource"/> 
    </property> 
    <property name="hibernateProperties"> 
     <props> 
      <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> 
      <prop key="hibernate.dialect">${hibernate.dialect}</prop> 
      <prop key="hibernate.format_sql">${hibernate.format_sql}</prop> 
      <prop key="hibernate.hbm2ddl.auto">validate</prop> 
      <prop key="hibernate.cache.use_second_level_cache">true</prop> 
      <prop key="hibernate.cache.use_first_level_cache">true</prop> 
      <prop key="maxwait">10000</prop> 
      <prop key="maxidle">25</prop> 
      <prop key="minidle">5</prop> 
     </props> 
    </property> 
    <property name="packagesToScan"> 
     <array> 
      <value>de.xxx.gatrinws</value> 
     </array> 
    </property> 
</bean> 

<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory"/> 
</bean> 

<tx:annotation-driven transaction-manager="txManager"/> 

А вот мой Dao, где автоматическое связывание из SessionFactory, кажется, не работает: (файл класс расположен по адресу: de.xxx.gatrinws .service, так что проверка компонента должна работать, не так ли?)

@Repository 
@Transactional 
public class PriceDaoHibernateImpl implements PriceDao { 

private final SessionFactory sessionFactory; 

@Autowired 
public PriceDaoHibernateImpl(@Qualifier(value = "sessionFactory") SessionFactory sessionFactory) { 
    this.sessionFactory = sessionFactory; 
} 

@Override 
public Product findProduct(String ean) { 
    return null; // to be added 
} 

}

Кто-нибудь знает, как это решить? Автосервис службы работает как шарм. Кажется, что что-то не так с конфигурацией sessionFactory. Но: Так оно работает для других проектов для меня.

Заранее благодарен!

(В случае, если вам интересно: я x'ed имя базового пакета)

EDIT:

Это "кажется", что applicationContext.xml (Spring Config) копируется/target/while и некоторые свойства не могут быть разрешены. Нужно ли добавлять целевую папку где-нибудь, чтобы свойства могли быть правильно решены? see screenshot here

Конфигурация без копирования может без проблем разрешать все свойства.

+0

Вы пробовали @Autowired при объявлении SessionFactory? –

+0

Да. уже пробовал. Нет разницы. – Hoax

+0

Можете ли вы попробовать разместить ваш applicationContext.xml в src/main/webapp/WEB-INF? Это должно быть местоположение по умолчанию для него –

ответ

-3

Вы пытались с помощью аннотации с автоподдержкой ?? как показано ниже:

@Autowired 
    private SessionFactory sessionFactory; 
+0

Да, уже пытался добавить его к члену. Оба обычно должны работать, но это не устраняет проблему :( – Hoax

+0

У меня нет большой идеи, но вы также можете попробовать с @Autowired (required = false) – sudhir

+0

, которую вы можете перекрестно проверить с помощью следующей записи: http: // stackoverflow. ком/вопросы/25288716/может-не-autowire-дао-нет-квалификационному-боб из типа обретенных-для-зависимости? RQ = 1 – sudhir

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

  • Нет связанных вопросов^_^