【问题标题】:maven-embedded-glassfish-plugin with Hibernate 4.3.5, Springmaven-embedded-glassfish-plugin with Hibernate 4.3.5, Spring
【发布时间】:2014-10-06 14:06:52
【问题描述】:

在 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>

我的 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:开始: org.apache.catalina.LifecycleException: org.springframework.beans.factory.BeanCreationException:错误 创建名称为“entityManagerFactory”的bean ServletContext 资源 [/WEB-INF/applicationContext-persistence.xml]: 调用 init 方法失败;嵌套异常是 java.lang.NoSuchMethodError: javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/ForeignKey

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

【问题讨论】:

    标签: java spring hibernate maven glassfish


    【解决方案1】:

    事实证明,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 目前不支持新的 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>
    

    或者你可以尝试配置你的 glassfish-plugin 提到HERE:

    <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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-28
      • 2014-05-24
      • 1970-01-01
      • 2013-08-09
      • 1970-01-01
      • 2016-03-05
      • 2011-09-18
      相关资源
      最近更新 更多