您的位置:首页 > 运维架构

启动服务器的时候遇到的org.hibernate.PropertyNotFoundException: field [set] not found on xx.xxx.xx问题

2013-09-29 16:03 681 查看
以下是我公司新招来的菜鸟写了一段神代码后报的错,我调试了很长时间也查阅了很多资料,终于在下午的时候调试明白了,以此为例提醒其他的程序猿们写代码要认真啊!2B错误犯了都没地方goole去啊!!

启动tomcat时报错代码如下:

严重: 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 URL [file:/D:/apache-tomcat-6.0.33/apache-tomcat-6.0.33/webapps/hospital/WEB-INF/classes/applicationContext.xml]: Invocation of init method failed;
nested exception is org.hibernate.PropertyNotFoundException: field [set] not found on com.zhaokanqi.bean.Registration

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1403)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)

at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:290)

at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)

at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:287)

at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:189)

at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:545)

at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:871)

at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423)

at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:272)

at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:196)

at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)

at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4206)

at org.apache.catalina.core.StandardContext.start(StandardContext.java:4705)

at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)

at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)

at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)

at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1079)

at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1002)

at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:506)

at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317)

at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)

at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)

at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065)

at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)

at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)

at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)

at org.apache.catalina.core.StandardService.start(StandardService.java:525)

at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)

at org.apache.catalina.startup.Catalina.start(Catalina.java:595)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)

at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

Caused by: org.hibernate.PropertyNotFoundException: field [set] not found on com.zhaokanqi.bean.Registration

at org.hibernate.property.DirectPropertyAccessor.getField(DirectPropertyAccessor.java:145)

at org.hibernate.property.DirectPropertyAccessor.getField(DirectPropertyAccessor.java:137)

at org.hibernate.property.DirectPropertyAccessor.getGetter(DirectPropertyAccessor.java:160)

at org.hibernate.util.ReflectHelper.getter(ReflectHelper.java:241)

at org.hibernate.util.ReflectHelper.reflectedPropertyClass(ReflectHelper.java:229)

at org.hibernate.mapping.SimpleValue.setTypeUsingReflection(SimpleValue.java:302)

at org.hibernate.cfg.HbmBinder.createProperty(HbmBinder.java:2193)

at org.hibernate.cfg.HbmBinder.createClassProperties(HbmBinder.java:2170)

at org.hibernate.cfg.HbmBinder.createClassProperties(HbmBinder.java:2060)

at org.hibernate.cfg.HbmBinder.bindRootPersistentClassCommonValues(HbmBinder.java:381)

at org.hibernate.cfg.HbmBinder.bindRootClass(HbmBinder.java:295)

at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:166)

at org.hibernate.cfg.Configuration.add(Configuration.java:716)

at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:551)

at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:677)

at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1460)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1400)

... 36 more

2013-9-29 15:32:14 org.apache.catalina.core.StandardContext start

严重: Error listenerStart

2013-9-29 15:32:14 org.apache.catalina.core.StandardContext start

严重: Context [/hospital] startup failed due to previous errors

2013-9-29 15:32:14 org.apache.catalina.core.ApplicationContext log

信息: Closing Spring root WebApplicationContext

2013-9-29 15:32:15 org.apache.coyote.http11.Http11Protocol start

信息: Starting Coyote HTTP/1.1 on http-8080

2013-9-29 15:32:15 org.apache.jk.common.ChannelSocket init

信息: JK: ajp13 listening on /0.0.0.0:8009

2013-9-29 15:32:15 org.apache.jk.server.JkMain start

信息: Jk running ID=0 time=0/32 config=null

2013-9-29 15:32:15 org.apache.catalina.startup.Catalina start

信息: Server startup in 5321 ms

问题所在:

这位菜鸟非常固执一定要先创建好pojo类以及类里面的getset等方法都写好了以后然后正向工程创建数据库的方式去写项目,ok,就算他么经验这么做不符合开发项目的实际情况,但是按照他本人的思路往下捋顺是没有问题的,但是等他写好一堆东西后就报错了。还骗我说昨天没报错就今天报错了,我扯个脖子在那调试吧:

第一步:是不是创建的pojo类有问题,是不是他自己手写的get set方法,我查看了一下没有问题;

继续第二步骤:是不是他的application.xml文中对于正向工程创建数据库的配置文件写错了,我盯着屏幕看了半天也没错。如下:

发现没错,我又查找了相关方面的知识,百思不得其解啊,最终最终高潮来了 我灵机一动去看看hbm文件,同学们错误找到了:

<class name="com.zhaokanqi.bean.Registration" table="Registration">

<id name="patientId" column="patientId" >

<generator class="native"></generator>

</id>

<property name="name" column="name"/>

<property name="set" column="sex"/>

<property name="cost" column="cost"/>

<property name="age" column="age"/>

<property name="outpatientsGenre" column="outpatientsGenre"/>

<property name="outpatientsNumber" column="outpatientsNumber"/>

<property name="outpatientsOffices" column="outpatientsOffices"/>

<property name="doctorName" column="doctorName"/>

<property name="outpatientsDoctor" column="outpatientsDoctor"/>

<property name="registrationPersonnel" column="registrationPersonnel"/>

<property name="registrationCost" column="registrationCost"/>

<property name="lookCost" column="lookCost"/>

</class>

尼玛,写映射文件的时候一个类型都没设置,人家数据库知道你定义的是毛线类型啊,将应该加的type=“xxx”全部都加上,服务器再也不报错了。

但是回头思考这个问题,如果再看到类似于: org.hibernate.PropertyNotFoundException: field [set] not found on xx。xxx。xx的exception的时候,要理解字面意思filed的含义就是域,在java代码里就是pojo类在数据库里就是字段,人家找不到,找不到不是java代码里面没有这个东西就是数据库没有(如果是java代码的话报错的内容能具体些,能具体到哪些没有找到),所以啊 调错的时候还是要根据控制台反馈的信息去思考不然瞎调乱调很浪费时间的说!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: