Spring與Hibernate的sessionFactory問題:Error creating bean with name 'sessionFactory'

本文就sessionFactory走過的坑,做一個記錄

首先,先展示一個錯誤;

[INFO] Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in URL [file:/D:/WorkPlace/eclipse_spring/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/zhilian_gw/WEB-INF/classes/applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.InvalidMappingException: Could not parse mapping document from resource /ct/bri/domain/Company.hbm.xml
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1566)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:743)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
	at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
	at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
	at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4992)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5490)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
	at java.util.concurrent.FutureTask.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Caused by: org.hibernate.InvalidMappingException: Could not parse mapping document from resource /ct/bri/domain/Company.hbm.xml
	at org.hibernate.cfg.Configuration$MetadataSourceQueue.processHbmXml(Configuration.java:4009)
	at org.hibernate.cfg.Configuration$MetadataSourceQueue.processHbmXmlQueue(Configuration.java:3998)
	at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3986)
	at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1398)
	at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1375)
	at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:658)
	at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:189)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1625)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1562)
	... 21 more
Caused by: org.hibernate.MappingException: class ct.bri.domain.Company not found while looking for property: comp_opt_id
	at org.hibernate.util.ReflectHelper.reflectedPropertyClass(ReflectHelper.java:232)
	at org.hibernate.mapping.SimpleValue.setTypeUsingReflection(SimpleValue.java:316)
	at org.hibernate.cfg.HbmBinder.createProperty(HbmBinder.java:2297)
	at org.hibernate.cfg.HbmBinder.createClassProperties(HbmBinder.java:2274)
	at org.hibernate.cfg.HbmBinder.createClassProperties(HbmBinder.java:2164)
	at org.hibernate.cfg.HbmBinder.bindRootPersistentClassCommonValues(HbmBinder.java:412)
	at org.hibernate.cfg.HbmBinder.bindRootClass(HbmBinder.java:326)
	at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:177)
	at org.hibernate.cfg.Configuration$MetadataSourceQueue.processHbmXml(Configuration.java:4006)
	... 29 more
Caused by: java.lang.ClassNotFoundException: ct.bri.domain.Company
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Unknown Source)
	at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:192)
	at org.hibernate.util.ReflectHelper.reflectedPropertyClass(ReflectHelper.java:228)
	... 37 more
看這個報錯,乍一看,以爲是實體對象文件的映射出了問題,但是,檢查了半天,明明好好地,沒有問題,但是爲什麼報錯。
果然,在spring的 配置文件中,創建 Spring 的 SessionFactory 工廠 ,如果使用的是 Annotation (也就是在代碼中使用註解@Resource或者@Autowired注入sessionFactory)的方式,不能使用 LocalSessionFactoryBean ,而應該使用 org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean 。而我,原來在Spring3中正是使用的 LocalSessionFactoryBean,才導致了找不到sessionFactory,提示我注入有問題。

因此,在更換之後,順利解決bug。

發佈了46 篇原創文章 · 獲贊 20 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章