2011-12-07 94 views
1

我有一個基於Spring + Hibernate的Web應用程序,它運行良好。但是,當我嘗試通過單元測試來測試它,我得到了:單元測試異常OneToMany.orphanRemoval()Z

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

我讀了很多關於這個問題,所有的人說來,由於JPA1和地方JPA2在classpath。但是我的類路徑中沒有任何基於JPA1的jar,但是Hibernate自己提供了JPA2,但仍然有異常。

我的圖書館棧以下,

休眠3.6.8

  • hibernate.jar文件
  • 休眠-JPA-2.0-API-1.0.1.Final.jar
  • hibernate- testing.jar
  • antlr-2.7.6.jar
  • commons-collections-3.1.jar
  • 的dom4j-1.6.1.jar
  • 了Javassist-3.12.0.GA.jar
  • JTA-1.1.jar
  • SLF4J-API-1.6.1.jar
  • 共享記錄-1.1.1的.jar

Spring庫3.0.6

  • org.springframework.aop;版本= 「[3.0.6.RELEASE,3.0.6.RELEASE]」,
  • org.springframe work.asm; version =「[3.0.6.RELEASE,3.0.6.RELEASE]」,
  • org.springframework.aspects; version =「[3.0.6.RELEASE,3.0.6.RELEASE]」,
  • org.springframework.beans;版本= 「[3.0.6.RELEASE,3.0.6.RELEASE]」,
  • org.springframework.context;版本=「[3.0.6.RELEASE,3.0.6.RELEASE ] 「
  • org.springframework.context.support;版本= 」[3.0.6.RELEASE,3.0.6.RELEASE]「,
  • org.springframework.core;版本=」[3.0.6.RELEASE ,3.0.6.RELEASE]「,
  • org.springframework.expression; version =」[3.0.6.RELEASE,3.0.6.RELEASE]「,
  • org.springframework.jdbc; version =「[3.0.6.RELEASE,3.0.6.RELEASE]」,
  • org.springframework.jms; version =「[3.0.6.RELEASE,3.0.6。 RELEASE] 「
  • org.springframework.orm;版本= 」[3.0.6.RELEASE,3.0.6.RELEASE]「,
  • org.springframework.oxm;版本=」[3.0.6.RELEASE, 3.0.6.RELEASE] 「
  • org.springframework.transaction;版本= 」[3.0.6.RELEASE,3.0.6.RELEASE]「,
  • org.springframework.web;版本=」[3.0。 6.RELEASE,3.0.6.RELEASE]「,
  • org.springframework.web.se rvlet; version =「[3.0.6.RELEASE,3.0.6.RELEASE]」,
  • org.springframework.web.portlet; version =「[3.0.6.RELEASE,3.0.6.RELEASE]」,
  • com。springsource.org.aopalliance;版本= 「[1.0.0,1.0.0]」

我的單元測試代碼,很簡單:

@ContextConfiguration(locations = {"classpath:spring/applicationContext.xml" }) 
public class RegistrationServiceTest extends AbstractJUnit4SpringContextTests { 

    @Autowired 
    RegisterationSerivce serivce; 

    @Test 
    public void getRegistrationRefData() { 
     List list = serivce.getAllCustomers(); 
     System.out.println(list.size()); 
    } 
} 

我會在這任何幫助是巨大的感謝看待。

回答

1

我只是解決了問題...這是由於「Java EE 5個的庫」,其中包含以下庫。

-javaee.jar 
-jsf-impl.jar 
-jsf-api.jar 
-jstl-1.2.jar 

我正在使用MyEclipse Enterprise Workbench 9.0,它會自動爲每個Web項目添加「Java EE 5 Libraries」。因此,如果JPA & JSF想要使用自定義庫,我們必須刪除它們。

+1

儘管我可以理解你的挫敗感,你會介意看你的語言嗎? ;-) –

1

這絕對是類路徑中某處的JPA 1.0 jar。請檢查下面的語句的輸出,以確定該JAR的確切位置:

System.out.println(OneToMany.class.getProtectionDomain().getCodeSource().getLocation()); 
+0

我會在系統上通過您的提示檢查此事。順便說一下,哪裏是最好的URL下載JPA 2.0?使用hibernate自己提供的「hibernate-jpa-2.0-api-1.0.1.Final.jar」是否好? Thankx –

+0

javax.persistence.OneToMany.class.getProtectionDomain()。getCodeSource()它給我null。 –

+0

不是很好的語言.. – ziggy