项目练习时遇到的问题
问题1: Could not find a getter for
练习一个项目时,点击链接报错(抄录部分):
org.hibernate.PropertyNotFoundException: Could not find a getter for StationRun in class cn.itcast.elec.domain.ElecCommonMsg at cn.itcast.elec.container.ServiceProviderCord.load(ServiceProviderCord.java:20) at cn.itcast.elec.container.ServiceProvider.<clinit>(ServiceProvider.java:10) at cn.itcast.elec.web.action.ElecCommonMsgAction.<init>(ElecCommonMsgAction.java:14)
看到文章:could not find a getter for ... in class ... 异常的原因解析
可能原因如下: 1.真的没有写getter方法(发生几率:1%) 2.*.hmb.xml文件中的属性名和pojo不一致(*.hbm.xml和*.java没衔接好,不一致),字段属性没有正确配置,比如,*.hmb.xml中*.java的地址要明确(明确指出引用包的完整路径);映射错误;有多个主键时,对生成的联合主键配置错误;拼写错误(包括多空格)等(发生几率:48%) 3.方法写错/方法名写错,要按照javabean的书写规范写啊,要不然打死也找不到哪儿错了(发生几率:50%) 这里提一下:get/set是不是不允许方法名中有连续两个大写字母,例如 public String getODPType(){ return this.oDPType; } public void setODPType(String oDPType){ this.oDPType = oDPType; } 这样写它就会报错,报找不到getter for oDPType的错误,但下面这样写就可以了 public String odpType; public String getOdpType(){ return this.odpType; } public void setOdpType(String odpType){ this.odpType = odpType; } 4.其他不明原因(发生几率:1%)
最终修改ElecCommonMsg.hbm.xml后显示正常。
注意两点:1、表字段名首字母需要小写; 2、字段的顺序需要与domain中定义的一致。 3、明确指同的包的完整路径
问题2:类文件不更新
将生成的类文件删除后,重新发布后再次查看WEB-INF下并没有重新生成类文件。
操作:将所有类包重新导入一遍,再次发布运行就可以了。
问题3:Hibernate 中出现 XXXX is not mapped 问题
检查最终是由于HQL中的表名是与对应hibernate.cfg.xml中的表名大小写不一致所致。修改一致后就不报错了。
HQL语句中表名应该是ORM映射的类名
问题4:Field 'id' doesn't have a default value问题解决方法
原因:因为assigned是指主键是由人工分配的,而native则指主键值由库自动给出。
原来配置中设置的是native,而代码里也将ID值人工分配了,所以报错,最终修改配置文件中为assigned后保存成功。