javax.persistence.OneToMany.orphanRemoval()Z的另一种原因及解决办法

hibernate javax.persistence.OneToMany.orphanRemove()Z。。。这个错误。后来经过查阅网上资料,才知道3.5这个版本和j2ee里边的javaee.jar有冲突。Fuck!估计3.6版本应该修复了这个bug。我手边有个3.2版本的。对hibernate需要的jar包进行了总结:

Hibernate3.5必须的jar包
                        hibernate3.jar  
                        antlr-2.7.6.jar  
                         commons-collections-3.1.jar  
                         dom4j-1.6.1.jar  
                         javassist-3.9.0.GA.jar  
                         jta-1.1.jar  
                        slf4j-api-1.5.8.jar  
                        slf4j-nop-1.5.8.jar 


 Hibernate使用Annotation(注解)需加
                         hibernate-jpa-2.0-api-1.0.0.Final.jar 


 Hibernate3.5以前的版本则需要

                        hibernate-annotations.jar  
                        ejb3-persistence.jar 


 由于Hibernate3.5的hibernate3.jar已包含了annotation所以只需加jpa的api就行了

hibernate2.6版本也没问题。

 

项目的持久层替换为了Hibernate3.6.9,本地tomcat启动正常,bamboo自动发布项目到开发服务器(部署到Resin)上,访问项目服务出现:javax.persistence.OneToMany.orphanRemoval()Z异常 。

第一反应是,Maven的配置中存在问题,检查maven的配置,没有发现配置上的问题,软件版本的引用正确。接着到网上搜索,出现最多的答案是:Java EE 5 Libraries和Hibernate的冲突,还有,hibernate-jpa-2.0-api-1.0.0.Final和ejb3-persistence有冲突。但是我们的项目这方面配置没有问题。

接着分析问题的原因,本地启动正确,而开发服务器的启动有问题,差异在于部署的服务器Tomcat和Resin上,检查线上Resin的lib目录中有一个jpa-15.jar,查看这个jar文件只有一个package:javax.persistence,当中包括OneToMany文件,问题明确了。解决的办法是备份jpa-15.jar,然后删除,重新启动resin,访问项目,问题解决。

不负责猜测,Resin提供部分JPA功能,但服务器的版本难和软件版本同步,不知算不算Resin的问题?

问题总结:JavaEE项目中因为class的冲突导致的启动,运行问题比较多,尤其是开发经验较少的时候,非常让人头疼。此类问题,有一种常用的解决办法,可以在运行的代码中,打印出现问题的类路径信息。得到当前类信息的办法,通过Java反射,下面是其中一个方法。
类路径查找方法,打印如下信息:

Class. forName (  "package+className" ). getProtectionDomain ( ). getCodeSource ( ). getLocation ( ). getFile ( )

以javax.persistence.OneToMany为例,我的项目在Windows+Tomcat上,

System. out. println ( Class. forName (  "javax.persistence.OneToMany" ). getProtectionDomain ( ). getCodeSource ( ). getLocation ( ). getFile ( ) )

 

信息的内容大致如:
D:/apache-tomcat-6.0.32/webapps/*****/WEB-INF/lib/hibernate-jpa-2.0-api-1.0.1.Final.jar

通过以上方法,可以快速的想要定位的类是否正确加载。

你可能感兴趣的:(java)