今天做ssh项目时碰到报这个错:
org.hibernate.HibernateException: CGLIB Enhancement failed: com.medicom.lcsy.model.EvoaPijian
at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.getProxy(CGLIBLazyInitializer.java:102)
at org.hibernate.proxy.pojo.cglib.CGLIBProxyFactory.getProxy(CGLIBProxyFactory.java:49)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:379)
...........
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:799)
在网上查了一下,有一个方法可以,解决问题:
错误代码:org.hibernate.HibernateException: CGLIB Enhancement failed: <classname>
答:Hibernate 3的默认方式是把所有类通过代理方式来进行延迟加载。如果代码中的类有一个私有无参的构造器的话,Hibernate将无法在运行时将项目代码中的类作为子类装载。为了避免这个错误,类中的构造器函数至少应该在包内可见。
在一对多的类里写了一个默认构造函数,要public的,重新运行,ok,问题解决了。
还有其他的一些解决方法,多是从jar包入手,这里罗列,以备查询。
1. 之前遇到过类似问题.需要升级cglib-2.1.jar到2.2
2.
2006年11月05日 16:17:29
Spring Hibernate在AOP方面的配置冲突解决之道
环境:Spring2.0 Hibernate3.1.x/Hibernate3.2
在使用Spring的AOP编程时,会用到这几个lib:
asm-2.2.2.jar
asm-commons-2.2.2.jar
asm-util-2.2.2.jar
Hibernate使用如果lib:
asm.jar
asm-attrs.jar
其中asm-2.2.2.jar与asm.jar存在类上的冲突!!!
使用其中之一或两者都使用,可能会出现如下错误:
java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor
java.lang.NoClassDefFoundError: org/objectweb/asm/commons/EmptyVisitor
java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit。。。。。。
解决办法是:
1.去掉类路径上的关于Hibernate的3个lib
asm.jar
asm-attrs.jar
cglib-2.1.3.jar
2.加入Spring中的以下4个lib
asm-2.2.2.jar
asm-commons-2.2.2.jar
asm-util-2.2.2.jar
cglib-nodep-2.1_3.jar
昨晚试一试了,按照文章里做了,还是不行。和黑哥聊天的时候,还说起Java方面厂商太多,好麻烦。支持Microsoft的黑哥,又说,“没有统一的标准”。我也有点小感叹,毕竟有时候就会出一些莫名其妙的问题,虽然最终有人帮忙解决,但的确浪费了很多时间。不过,Java还是有标准的!
今天早上查了下,才反应过来,项目已经发布,就应该去Tomcat的项目文件夹里的lib下看看,果然,那3个lib还在。删除之,运行成功。
帖子链接:http://chenwenshun-gmail-com.iteye.com/blog/1174223