天天看點

更新Hibernate3.5:javax.persistence.OneToMany.orphanRemoval()Z

Spring3.0 + Hibernate3.5:

啟動伺服器報:

Caused by: java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z

at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1830)

at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:762)

at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:726)

at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:636)

at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:359)

at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1206)

at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:673)

at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1369)

at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335)

... 71 more

期待高手解決,謝謝。。

==================================================================================

(2011年12月3日 淩晨1點50分)首先道個歉,一年多沒有關注這篇部落格了,是以好多人留言希望我提供解決方案,我沒能及時看到并幫助你們,希望大家諒解。這次偶然在其他幾個技術論壇裡看到我這篇部落格連結,但是并沒能實質性幫助其他人解決問題,是以我又對這篇部落格的問題重新分析了一下,以下就是分析結果(其實十分簡單的,隻是大家沒有仔細深入的查找問題而已)。

1.在hibernate3.5之前,我們運用hibernate開發J2EE項目通常會引以下幾個jar包:

hibernate核心包:hibernate3.jar

持久化:ejb3-persistence.jar

則javax.persistence.OneToMany.class就在ejb3-persistence.jar中。

2.在hibernate3.5及其以後,運用hibernate開發J2EE項目通常會引以下幾個jar包:

hibernate核心包:hibernate3.jar

持久化:hibernate-jpa-2.0-XXX.jar

hibernate-jpa-2.0-XXX.jar中已将包含了ejb3-persistence.jar所有類庫和其他一些擴充,固然javax.persistence.OneToMany.class也就在hibernate-jpa-2.0-XXX.jar中了。是以當我們從3.5以下版本上級到3.5以上版本時,很容易出現不知道哪些jar包該保留哪些該删掉,因而兩個jar包同時存在,出現了這個沖突異常。

3.其實持久化并不是隻有ejb3-persistence.jar和hibernate-jpa-2.0-XXX.jar提供,Java EE(注意:是Java EE,并不是J2ee,J2ee在1.4以後就命名為Java EE,而且新增了很多類庫)核心類庫同樣也提供了javax.persistence類庫,當你的項目hibernate導入的jar都正常後仍舊出現沖突異常,那麼你就要考慮是不是你引入的其他類庫導緻了這個異常。比如Java EE5及其以後的核心類庫。

以上隻是本人片面的分析與思考,如有不對之處,請大家多多指教。