闲来无聊搭了个小型WEB应用系统框架,用了从JBOSS COMMUNITY上下载的四个包文件:
hibernate-core-3.6.3.Final
hibernate-commons-annotations-3.2.0.Final
hibernate-jpa-2.0-api-1.0.1.Final
hibernate-annotations-3.5.0-Final 一切都是这个包惹的祸
做好Hibernate的各项配置后,写了一个Test类用main方法做了一下测试,可以正常进行增删改查的数据库操作。接着就开使在工程里写了 些操作数据库的方法,然后写了个页面配合Struts的完整流程,读取并在JSP页面上显示数据库中一个表的内容列表。接着启动Tomcat服务后,第一 次执行这个Action的时候报了一个错误,
java.lang.VerifyError: class org.hibernate.type.WrappedMaterializedBlobType overrides final method,在没有重启TOMCAT的情况下再次执行这个Action就会出现,
HibernateSessionFactory.getSession() HibernateSessionFactory java.lang.NoClassDefFoundError 错误。其中HibernateSessionFactory 这个类是MyEclipse添加Hibernate的时候自动生成的Factory类。
因为是刚搭的框架,所以引入的包还比较少,所以看了眼buildpath中,并没有重复的包,很奇怪。于是上网开搜,终于被我搜到。。得以解决,原因是从 hibernate-core 3.6.0以后hibernate-annotations
被整合到到hibernate-core这个包中,所以我的问题就是
hibernate-core-3.6.3.Final 和 hibernate-annotations-3.5.0-Final 冲突造成的。从buildpath中remove掉hibernate-annotations-3.5.0-Final.jar,删除WEB-INF下 的classes文件夹的内容,重新build了下project,一切恢复正常。
参考:https://forum.hibernate.org/viewtopic.php?f=1&t=1010086
http://stackoverflow.com/questions/6384428/version-disparity-in-hibernate-core-annotation-jars