使用Hibernate 4.3.5,Spring的maven-embedded-glassfish-plugin

时间:2014-10-06 14:06:53

标签: java spring hibernate maven glassfish

我在使用带有Hibernate 4.3.5和Spring的maven-embedded-glassfish-plugin(版本3.1.1)时遇到问题。

我的pom.xml看起来像这样:

<dependencies> 
    ...   
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>4.3.5.Final</version>
    </dependency>
    ...
</dependencies>

<build>
    <plugins>
        ...
        <plugin>
            <groupId>org.glassfish</groupId>
            <artifactId>maven-embedded-glassfish-plugin</artifactId>
            <version>3.1.1</version>
        </plugin>
        ...
    </plugins>
</build>

My Spring的entityManagerFactory配置非常标准:

<bean id="entityManagerFactory"
      class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="jpaVendorAdapter" ref="hibernateJpaVendorAdapter"/>
    <property name="packagesToScan" value="com.example.domain"/>
    <property name="jpaProperties" ref="hibernateJpaProperties"/>
</bean>

当我调用mvn embedded-glassfish:run时,我得到一个例外:

  

严重:加载应用时出现异常:   java.lang.IllegalStateException:ContainerBase.addChild:start:   org.apache.catalina.LifecycleException:   org.springframework.beans.factory.BeanCreationException:错误   创建名为&entityManagerFactory&#39;的bean定义于   ServletContext资源[/WEB-INF/applicationContext-persistence.xml]:   调用init方法失败;嵌套异常是   java.lang.NoSuchMethodError:   javax.persistence.JoinColumn.foreignKey()Ljavax /持久/ ForeignKey的

我试图更改许多依赖项和许多不同的配置,但不知道如何处理此问题。

1 个答案:

答案 0 :(得分:0)

事实证明,Hibernate 4.3.5实现了JPA 2.1标准,而GlassFish 3(和maven-embedded-glassfish-plugin)只实现了JPA 2.0,这就是问题的原因。

GlassFish 4实现了新的JPA 2.1,因此如果您构建应用程序(.war / .ear文件),您可以在GlassFish 4上无问题地部署它。但 maven-embedded-glassfish-plugin < / em>目前不支持新的GlassFish 4。

此问题的解决方案可能是简单地将Hibernate版本降级为 4.2.15.Final ,它使用JPA 2.0:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>4.2.15.Final</version>
</dependency>

或者您可以尝试按照HERE配置 glassfish-plugin

<plugin>
   <groupId>org.glassfish.embedded</groupId>
     <artifactId>maven-embedded-glassfish-plugin</artifactId>
     <version>3.1.2.2</version>
     <dependencies>
       <dependency>
       <groupId>org.glassfish.main</groupId>
       <artifactId>simple-glassfish-api</artifactId>
       <version>4.0-b79</version>
     </dependency>
     <dependency>
       <groupId>org.glassfish.main.extras</groupId>
       <artifactId>glassfish-embedded-all</artifactId>
       <version>4.0-b83</version>
     </dependency>
   </dependencies>
 </plugin>