【SSH学习】配置ORM元数据后,Tomcat启动异常Exception sending context initialized event to listener instance of class

配置hibernateORM元数据后,爆出异常,百思不得其解。

那天百度了很久:将<prop key="hibernate.hbm2ddl.auto">update</prop>注释掉,问题得到解决。

但治标不治本,为什么会出异常,仍然不清楚。

过了两天,框架熟练以后,想再看看这个问题。将注释掉的代码打开,观察异常信息,英文大部分看不懂,但其中主要提到了一个字段cust_industry,难道是这个字段没配好?

再次检查了包含该字段的对象配置XML文件,终于找到元凶:字段配重复了!!!

出问题的那天引入了数据字典,对XML进行了配置,配置了该字段对数据字典的多对一关系,但是没有将之前配置的该字段删掉,导致重启后因为配置了自动建表,会读取映射关系,出现同一个字段两个映射关系,所以报错,这也解释了为什么把auto代码注释掉后就不报错误。

所以:编程必须要细心,且编且仔细。大笑

出了问题不要紧,仔细查看异常信息,不要被大段的异常吓到,里面往往有问题的蛛丝马迹,再去检查代码,往往能够快速解决问题。

配错的XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.aitiman.domain.Customer" table="cst_customer">
    	<id name="cust_id" column="cust_id">
    		<generator class="native"></generator>
    	</id>
    	<property name="cust_name" column="cust_name"></property>
    	<!-- 元凶在这里↓ -->
    	<property name="cust_industry" column="cust_industry"></property> 
    	<property name="cust_linkman" column="cust_linkman"></property>
    	<property name="cust_phone" column="cust_phone"></property>
    	<property name="cust_mobile" column="cust_mobile"></property>

    	<many-to-one name="cust_source" column="cust_source" class="com.aitiman.domain.BaseDict" ></many-to-one>
    	    	<!-- 配了两次,蠢哭! -->    	
    	<many-to-one name="cust_industry" column="cust_industry" class="com.aitiman.domain.BaseDict" ></many-to-one>
    	<many-to-one name="cust_level" column="cust_level" class="com.aitiman.domain.BaseDict" ></many-to-one>
    	
    	<set name="saleVisits">
    		<key column="visit_cust_id"></key>
    		<one-to-many class="com.aitiman.domain.SaleVisit"/>
    	</set>
    	
    	<!--     	<set name="linkMens" inverse="true">
    		<key column="lkm_cust_id"></key>
    		<one-to-many class="com.aitiman.domain.LinkMan"/>
    	</set> -->
    </class>    
</hibernate-mapping>


异常信息:

严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.MappingException: Could not determine type for: com.aitiman.domain.BaseDict, at table: cst_customer, for columns: [org.hibernate.mapping.Column(cust_industry)]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
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:753)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:446)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:328)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4973)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5467)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
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.MappingException: Could not determine type for: com.aitiman.domain.BaseDict, at table: cst_customer, for columns: [org.hibernate.mapping.Column(cust_industry)]
at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:396)
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:369)
at org.hibernate.mapping.Property.isValid(Property.java:225)
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:529)
at org.hibernate.mapping.RootClass.validate(RootClass.java:265)
at org.hibernate.boot.internal.MetadataImpl.validate(MetadataImpl.java:329)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:443)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:708)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724)
at org.springframework.orm.hibernate5.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:416)
at org.springframework.orm.hibernate5.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:401)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
... 21 more
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值