2011-07-25 38 views
0

我正嘗試將一個Java域和服務層與Grails應用程序集成。 Java項目使用Maven構建,Grails項目從Maven回購項目加載JAR。該服務項目包含一個XML Spring配置文件,它定義了一堆Spring bean。我試圖使這些提供給Grails的應用程序,通過加載這些豆類在grails-app/conf/spring/resources.groovyGrails和JPA集成

beans = {  
    importBeans('classpath:/applicationContext-services.xml') 
} 

人在這個文件中的豆是LocalContainerEntityManagerFactoryBean一個實例。在試圖創建這個bean時,我得到的錯誤:

Error creating bean with name 'entityManagerFactory' defined in class path resource [applicationContext-services.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode;

在Spring的JIRA基於this issue,它會出現在underlyiing問題是Spring和Hibernate/JPA版本之間出現不兼容。看來,我使用的是:

  • 春3.0.5.RELEASE
  • 休眠3.6.0.Final
  • 的Hibernate JPA-2.0-API 1.0.0.Final

我嘗試從Grails應用程序中刪除Hibernate插件,但似乎沒有任何區別。

回答

1

我有一個類似的問題,不得不使用降級我的jpa資源休眠3.3.2。 Grails 2.0將會有hibernate 3.6的支持。

+0

謝謝,我需要降級Hibernate和Hibernate-JPA JAR或只是前者? –

+0

我並不積極,但我相信你必須使用hibernate-entitymanager而不是jpa-2.0引用。您還必須添加更多的hibernate引用,因爲舊版本將驗證程序和註釋等內容分開。一種痛苦:( –

+0

我不認爲你有任何更多的具體信息需要的變化? –

0

在你的pom.xml添加這個或 'LIB' 文件夾:

<dependency> 
     <groupId>org.hibernate.javax.persistence</groupId> 
     <artifactId>hibernate-jpa-2.0-api</artifactId> 
     <version>1.0.0.Final</version> 
    </dependency> 
0

你有可能其他jar(S)定義(一個或多個)javax.persistence.spi.PersistenceUnitInfo 擺脫那些的。確保只有hibernate-jpa-2.0-api-1.0.1.Final.jar在課程路徑中。