hibernate痛苦的初体验

来源:互联网 发布:利基通讯淘宝店可靠吗 编辑:程序博客网 时间:2024/05/22 14:23

        从昨晚到现在搞了整整5个小时总算闯过了hibernate的第一关, 虽然这是一次颇为折磨人的经历但是收获自然还是不少的。现将问题的产生至圆满解决做一个记录:

     我使用的是myeclipse5.5.1GA  +  tomcat6.0 + 本地机上装的JDK为1.6版本

     1、 今天开始学习hibernate了, 在尝试了基本的插入、删除、修改操作成功之后我开始尝试往数据库中插入复合主键的操作。但是运行代码的时候弹出了错误框

    “Could not find the main class.program will exit” 及异常“org.hibernate.PropertyNotFoundException: Could not find a getter for property cusid in class cn.com.pojo.pk_customer"。 令我郁闷的是我在此之前做插入、删除、修改的时候都是成功了的, 由于我验证了一下自己的程序中的属性名与hbm中的属性名是一致的, 我便认为异常主要就是第一个的问题, 至于第二个异常一定是由于第一个异常所引发的。(最终我的这种想当然的推理被正名为是错误的!!!)
 

   2、 由于之前在使用eclipse时碰到过这样子的问题知道是由于JDK版本不对所导致的, 于是便马上将myeclipse的编译器修改为6.0的及在build path下将5.0的Jre换成了1.6的。 ^_^ ^_^  心想这下子便没问题了, 一运行还是这个问题。

  3、 由于我的hibernate试验是在本地环境下的试验,于是我就想尝试一下在以前的web工程是否会受到影响, 一启动tomcat就抛出了异常

        “java.lang.UnsupportedClassVersionError: Bad version number in .class file”

       完了完了, 这下子以前运行了几个月的tomcat环境也出现了问题。 上网查找了很久, 找到一个相关的说是这是因为tomcat的JDK与运行编译器的JDK版本不一致造成的。 ^_^  ^_^  不怕被人笑, 我之前都不知道tomcat也带有JDK, 只是隐约记得当初在安装Tomcat的过程中要选中一个虚拟机, 我那时选的就是1.6版的。 这会儿我的编译器的JDK已经被我改为1.6了怎么还会报这个错?  找到myeclipse下的tomcat 找到6.0再点击JDK, 发现其JDK用得是myeclipse5.5.1GA自带的5.0版本的, 改过来之后这个异常消失了。

     这其中暴露了自己之前的一个错误认识: 我认为安装tomcat的时候是添加了一个1.6版的虚拟机, 我就认为tomcat用的JDK就一定是1.6的

4、 1处所列举的异常照旧, 今天上午我将原来的那个工程删掉再重新搞了一个但还是出现这个问题。 于是我想转换一下思路, 我打算从 org.hibernate.PropertyNotFoundException:  ....这个异常着手, 根据在网上的一些说法我将我程序中的属性cusId改成cusid以及在xxx.hbm.xml中做了相应的改动, 没想到居然成功了。  我吐血呀, 为什么我一开始就那么确信导致的异常的起因是

“Could not find the main class.program will exit”所致了???

 5、 我并不满足于一次试验的成功, 于是我又将cusid换成了其他的名字, 一运行又是最初的那个异常? 心想属性的名字一定要跟数据库中对应的字段名一致?  ——答案是否定的, 因为我之前的试验就曾用了不相同的名字并且试验成功。  正当我再次陷入郁闷的时候突然看到我的set/get()方法仍然为  setCusid()与getCusid()当我将这两个方法删除并重新构建好set/get()方法之后问题结局了! 

         如果把get方法写为getname()或者getNAME(),会导致Hibernate在运行时抛出以下异常:
  
      net.sf.hibernate.PropertyNotFoundException:
     Could not find a getter
     for property name in class mypack.Customer

          如果已经出现这个异常,请您改下大小写     切记:  不要仅仅修改了属性, 还得注意其对应的set/get()方法以及set()方法中的参数,    还有就是set/get方法对大小写很敏感!!!

6、  试验中我曾在cmd下使用 java -version查看了JDK版本, 显示的是1.6版本的, 于是我便断然我的电脑上只有这一个版本的JDK, 其实这也是一个错误的认识, 使用那个命令查看的结果只能正名其是第一个被寻找到的JDK罢了, 切记!

7、 关于之前在使用eclipse时不安装JDK也可以使用的解释:

     eclipse不自带jdk,但它只需要jre就可以运行(不需要javac),因为它似乎自带编译器(plugin里有compile包),而且不用设置,因为现在的JRE安装会在环境变量中添加java这个命令(无论windows还是Linux),eclipse便利用它启动startup.jar。但如果只用jre,因为没有源代码,eclipse就不能根据源码生成库中type的注释了。

——————————————————附带的几个小问题————————————————————————

8、 我的tomcat在启动时竟然用了近20000ms, 上网查了一下tomcat启动慢的几个原因:

    a、 中间件启动慢基本都是因为服务启动的时候加载的东西太多了!极有可能和你的工程有关!

           我删除了webapps下一些不相关的工程, 运行一下果真就到了6000多ms。 ^_^  ^_^   

   b、 有时log4j记录大量日志也会导致tomcat启动很慢; 看看你的log4j是否设置为DEBUG级别了,如果是,改为ERROR级别试试   ————暂时还没有在程序中使用log4j。
 

  c、 在确定应用的web.xml,看看里面加载什么项目     ...   ...  本来ssh的项目速度就比较慢

 

9、 针对myeclipse自动编译失常的处理的方式: 点击 project->clean  ; 将project下的自动编译功能去掉,选择build all; 将jar包删除再导入;  直接refresh


 

原创粉丝点击