我在使用带有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的
我试图更改许多依赖项和许多不同的配置,但不知道如何处理此问题。
答案 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>