Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

Java Spring with Hibernate Data-Driven Application Design Add a DAO

Mauro Teixeira
Mauro Teixeira
3,727 Points

DAO: what's wrong here ?

Hello,

I'm taking the course "Spring with Hibernate" and I am now attempting to do the code exercise "Add a DAO".

However, when I submit the code I have a message saying "2 out of 2 tests failed. See preview for more details."

However, I think this is not a problem with my code but maybe a problem with the exercise instance machine? Because the exception I have seems to be related to Spring bean configuration.

What do you think?

Here is the exception:

19:04:06.619 [main] ERROR org.springframework.boot.SpringApplication - Application startup failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'contactDaoImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.hibernate.SessionFactory com.teamtreehouse.contactmgr.dao.ContactDaoImpl.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.Autowired(required=true)}
               at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
               at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
               at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
               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.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.test.SpringApplicationContextLoader.loadContext(SpringApplicationContextLoader.java:98)
               at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
               at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
               at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
               at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
               at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
               at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:228)
               at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:230)
               at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289)
               at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
               at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291)
               at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:249)
               at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89)
               at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
               at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
               at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
               at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
               at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
               at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
               at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
               at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
               at org.junit.rules.RunRules.evaluate(RunRules.java:20)
               at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
               at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:193)
               at org.junit.runners.Suite.runChild(Suite.java:127)
               at org.junit.runners.Suite.runChild(Suite.java:26)
               at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
               at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
               at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
               at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
               at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
               at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
               at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
               at org.junit.runner.JUnitCore.run(JUnitCore.java:138)
               at org.junit.runner.JUnitCore.run(JUnitCore.java:128)
               at org.junit.runner.JUnitCore.runClasses(JUnitCore.java:73)
               at com.teamtreehouse.contextmanagers.JUnitManager.gather(JUnitManager.java:14)
               at com.teamtreehouse.contextmanagers.JUnitManager.gather(JUnitManager.java:6)
               at com.teamtreehouse.contextmanagers.ContextManageable.managing(ContextManageable.java:35)
               at com.teamtreehouse.runners.JUnitRunner.runTests(JUnitRunner.java:22)
               at JavaTester.run(JavaTester.java:69)
               at JavaTester.main(JavaTester.java:40)
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.hibernate.SessionFactory com.teamtreehouse.contactmgr.dao.ContactDaoImpl.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.Autowired(required=true)}
               at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:573)
               at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
               at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
               ... 55 common frames omitted
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.Autowired(required=true)}
               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.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545)
               ... 57 common frames omitted
19:04:06.621 [main] ERROR org.springframework.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener@15975490] to prepare test instance [com.teamtreehouse.contactmgr.dao.ContactDaoTest1@4590c9c3]
java.lang.IllegalStateException: Failed to load ApplicationContext
               at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
               at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
               at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
               at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
               at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:228)
               at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:230)
               at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289)
               at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
               at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291)
               at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:249)
               at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89)
               at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
               at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
               at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
               at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
               at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
               at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
               at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
               at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
               at org.junit.rules.RunRules.evaluate(RunRules.java:20)
               at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
               at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:193)
               at org.junit.runners.Suite.runChild(Suite.java:127)
               at org.junit.runners.Suite.runChild(Suite.java:26)
               at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
               at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
               at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
               at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
               at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
               at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
               at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
               at org.junit.runner.JUnitCore.run(JUnitCore.java:138)
               at org.junit.runner.JUnitCore.run(JUnitCore.java:128)
               at org.junit.runner.JUnitCore.runClasses(JUnitCore.java:73)
               at com.teamtreehouse.contextmanagers.JUnitManager.gather(JUnitManager.java:14)
               at com.teamtreehouse.contextmanagers.JUnitManager.gather(JUnitManager.java:6)
               at com.teamtreehouse.contextmanagers.ContextManageable.managing(ContextManageable.java:35)
               at com.teamtreehouse.runners.JUnitRunner.runTests(JUnitRunner.java:22)
               at JavaTester.run(JavaTester.java:69)
               at JavaTester.main(JavaTester.java:40)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'contactDaoImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.hibernate.SessionFactory com.teamtreehouse.contactmgr.dao.ContactDaoImpl.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.Autowired(required=true)}
               at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
               at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
               at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
               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.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.test.SpringApplicationContextLoader.loadContext(SpringApplicationContextLoader.java:98)
               at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
               at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
               ... 39 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.hibernate.SessionFactory com.teamtreehouse.contactmgr.dao.ContactDaoImpl.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.Autowired(required=true)}
               at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:573)
               at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
               at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
               ... 55 common frames omitted
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.Autowired(required=true)}
               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.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545)
               ... 57 common frames omitted

2 FAILURES
-------

daoExists: Failed to load ApplicationContext
daoContainsFindAll: Failed to load ApplicationContext

My code:

package com.teamtreehouse.contactmgr.dao;

import com.teamtreehouse.contactmgr.model.Contact;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public class ContactDaoImpl implements ContactDao {

  @Autowired
  private SessionFactory sessionFactory;

  @Override
  public List<Contact> findAll() {
    Session session = sessionFactory.openSession();
    List<Contact> contacts = session.createCriteria(Contact.class).list();
    return contacts;    

  }
}
package com.teamtreehouse.contactmgr.dao;

import com.teamtreehouse.contactmgr.model.Contact;

import java.util.List;

public interface ContactDao {
  public List<Contact> findAll();

}

1 Answer

Alexander Nikiforov
seal-mask
.a{fill-rule:evenodd;}techdegree seal-36
Alexander Nikiforov
Java Web Development Techdegree Graduate 22,175 Points

Please take a look here:

https://teamtreehouse.com/community/not-sure-why-this-is-failing-2

Do not @Autowire sessionFactory. There is simply no session Factory in code challenge application context. Please take a look at task: make findAll() return null, not contacts.

Mauro Teixeira
Mauro Teixeira
3,727 Points

Thank you Alexander, it worked

J Tan
J Tan
11,847 Points

The challenge needs to clearly state that.