创建名为'entityManagerFactory'的bean时出错

编程入门 行业动态 更新时间:2024-10-26 00:19:12
本文介绍了创建名为'entityManagerFactory'的bean时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我试图运行一个dbtest,但是我得到以下错误: lockquote

引起:org.springframework.beans.factory .BeanCreationException:在类中定义名为'entityManagerFactory'的bean时出错path资源[root-context.xml]:调用init方法失败; 嵌套异常是java.lang.AbstractMethodError : org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo.getValidationMode()Ljavax / persistence / ValidationMode;

因为这样我也得到了以下错误: lockquote

引起的:org.springframework.beans.factory.BeanCreationException:在类路径中定义名称为'personRepository'的bean时出错 resource [root-context.xml]:初始化bean失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:使用名称'entityManagerF创建bean时出错在类中定义的'actory'路径资源[root-context.xml]:调用init方法失败; 嵌套异常是java.lang.AbstractMethodError: org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo.getValidationMode()Ljavax / persistence / ValidationMode;

因此,我们必须熟悉我的根环境文件,它看起来如下:

<?xml version =1.0encoding =UTF-8?> < beans xmlns =www.springframework/schema/beans xmlns:xsi =www.w3/2001/XMLSchema-instance xsi:schemaLocation =www.springframework/schema/beans www.springframework/schema/beans/spring-beans.xsd\"> <! - Root Context:定义所有其他Web组件可见的共享资源 并且 persisence.xml 看起来如下:

< persistence xmlns =java.sun/xml/ ns / persistence xmlns:xsi =www.w3/2001/XMLSchema-instance xsi:schemaLocation =java.sun/xml/ ns / persistence java.sun/xml/ns/persistence/persistence_2_0.xsd version =2.0> < persistence-unit name =civilforsvarettransaction-type =RESOURCE_LOCAL> < provider> org.hibernate.ejb.HibernatePersistence< / provider> <属性> < property name =hibernate.dialectvalue =org.hibernate.dialect.H2Dialect/> < property name =hibernate.hbm2ddl.autovalue =create-drop/> < property name =hibernate.show_sqlvalue =true/> < / properties> < / persistence-unit> < /持久性>

这是我的pom.xml文件:

<?xml version =1.0encoding =UTF-8?> < project xmlns =maven.apache/POM/4.0.0xmlns:xsi =www.w3/2001/XMLSchema-instance xsi:schemaLocation =maven.apache/POM/4.0.0 maven.apache/maven-v4_0_0.xsd\"> < modelVersion> 4.0.0< / modelVersion> < groupId> se.lowdin< / groupId> < artifactId> civilforsvaret< / artifactId> < name> civilforsvaret-webbapp< / name> <包装>战争< / packaging> < version> 1.0.0-BUILD-SNAPSHOT< / version> <属性> < java-version> 1.6< / java-version> < org.springframework-version> 3.1.1.RELEASE< /org.springframework-version> < org.aspectj-version> 1.6.10< /org.aspectj-version> < org.slf4j-version> 1.6.6< /org.slf4j-version> < / properties> <依赖关系> <! - Spring - > < dependency> < groupId> org.springframework< / groupId> < artifactId> spring-context< / artifactId> < version> $ {org.springframework-version}< / version> <排除项> <! - 排除Commons记录SLF4j - > <排除> < groupId> commons-logging< / groupId> < artifactId> commons-logging< / artifactId> < /排除> < /排除> < /依赖关系> < dependency> < groupId> org.springframework< / groupId> < artifactId> spring-webmvc< / artifactId> < version> $ {org.springframework-version}< / version> < /依赖关系> <! - AspectJ - > < dependency> < groupId> org.aspectj< / groupId> < artifactId> aspectjrt< / artifactId> < version> $ {org.aspectj-version}< / version> < /依赖关系> <! - MySql连接 - > < dependency> < groupId> mysql< / groupId> < artifactId> mysql-connector-java< / artifactId> < version> 5.1.24< / version> < /依赖关系> <! - 记录 - > < dependency> < groupId> org.slf4j< / groupId> < artifactId> slf4j-api< / artifactId> < version> $ {org.slf4j-version}< / version> < /依赖关系> < dependency> < groupId> org.slf4j< / groupId> < artifactId> jcl-over-slf4j< / artifactId> < version> $ {org.slf4j-version}< / version> < scope>运行时< / scope> < /依赖关系> < dependency> < groupId> org.slf4j< / groupId> < artifactId> slf4j-log4j12< / artifactId> < version> $ {org.slf4j-version}< / version> < scope>运行时< / scope> < /依赖关系> < dependency> < groupId> log4j< / groupId> < artifactId> log4j< / artifactId> < version> 1.2.15< / version> <排除项> <排除> < groupId> javax.mail< / groupId> < artifactId>邮件< / artifactId> < /排除> <排除> < groupId> javax.jms< / groupId> < artifactId> jms< / artifactId> < /排除> <排除> < groupId> com.sun.jdmk< / groupId> < artifactId> jmxtools< / artifactId> < /排除> <排除> < groupId> com.sun.jmx< / groupId> < artifactId> jmxri< / artifactId> < /排除> < /排除> < scope>运行时< / scope> < /依赖关系> <! - @Inject - > < dependency> < groupId> javax.inject< / groupId> < artifactId> javax.inject< / artifactId> < version> 1< / version> < /依赖关系> <! - Servlet - > < dependency> < groupId> javax.servlet< / groupId> < artifactId> servlet-api< / artifactId> < version> 2.5< / version> < scope>提供< / scope> < /依赖关系> < dependency> < groupId> javax.servlet.jsp< / groupId> < artifactId> jsp-api< / artifactId> < version> 2.1< / version> < scope>提供< / scope> < /依赖关系> < dependency> < groupId> javax.servlet< / groupId> < artifactId> jstl< / artifactId> < version> 1.2< / version> < /依赖关系> <! - Test - > < dependency> < groupId> junit< / groupId> < artifactId> junit< / artifactId> < version> 4.7< / version> < scope> test< / scope> < /依赖关系> < dependency> < groupId> org.easymock< / groupId> < artifactId> easymock< / artifactId> < version> 3.1< / version> < /依赖关系> < dependency> < groupId> org.hibernate< / groupId> < artifactId> hibernate-entitymanager< / artifactId> < version> 4.3.0.CR1< / version> < /依赖关系> < dependency> < groupId> com.h2database< / groupId> < artifactId> h2< / artifactId> < version> 1.3.174< / version> < /依赖关系> < dependency> < groupId> org.springframework< / groupId> < artifactId> spring-test< / artifactId> < version> 3.2.5.RELEASE< / version> < /依赖关系> < dependency> < groupId> org.springframework< / groupId> < artifactId> spring-jpa< / artifactId> < version> 2.0.8< / version> < /依赖关系> < dependency> < groupId> org.springframework< / groupId> < artifactId> spring-jdbc< / artifactId> < version> 3.2.5.RELEASE< / version> < /依赖关系> < dependency> < groupId> org.springframework.data< / groupId> < artifactId> spring-data-jpa< / artifactId> < version> 1.4.2.RELEASE< / version> < /依赖关系> < dependency> < groupId> org.hibernate.javax.persistence< / groupId> < artifactId> hibernate-jpa-2.0-api< / artifactId> < version> 1.0.1.Final< / version> < /依赖关系> < /依赖关系> < build> < plugins> < plugin> < artifactId> maven-eclipse-plugin< / artifactId> < version> 2.9< / version> <配置> < additionalProjectnatures> < projectnature> org.springframework.ide.eclipse.core.springnature< / projectnature> < / additionalProjectnatures> < additionalBuildcommands> < buildcommand> org.springframework.ide.eclipse.core.springbuilder< / buildcommand> < / additionalBuildcommands> < downloadSources> true< / downloadSources> < downloadJavadocs> true< / downloadJavadocs> < / configuration> < / plugin> < plugin> < groupId> org.apache.maven.plugins< / groupId> < artifactId> maven-compiler-plugin< / artifactId> < version> 2.5.1< / version> <配置> < source> 1.6< / source> < target> 1.6< / target> < compilerArgument> -Xlint:all< / compilerArgument> < showWarnings> true< / showWarnings> < showDeprecation> true< / showDeprecation> < / configuration> < / plugin> < plugin> < groupId> org.codehaus.mojo< / groupId> < artifactId> exec-maven-plugin< / artifactId> < version> 1.2.1< / version> <配置> < mainClass> org.test.int1.Main< / mainClass> < / configuration> < / plugin> < / plugins> < / build> < / project>

我是Spring MVC的完全noob,无法找到问题。 b

解决方案

这听起来像是一个ClassLoader冲突。我敢打赌,你在类路径上有javax.persistence api 1.x,而Spring试图访问 ValidationMode ,仅在JPA 2.0中引入。

C $ C><依赖性> < groupId> javax.persistence< / groupId> < artifactId> persistence-api< / artifactId> < version> 1.0< / version> < /依赖关系>

并将其从您的设置中删除。 (请参阅排除依存关系)

AFAIK JPA 2没有这样的通用发行版,但您可以使用这个Hibernate特有的版本:

<依赖性> < groupId> org.hibernate.javax.persistence< / groupId> < artifactId> hibernate-jpa-2.0-api< / artifactId> < version> 1.0.1.Final< / version> < /依赖关系>

好的,因为这不起作用,您似乎还有一些JPA-1版本某处。 在一个测试方法中,添加以下代码: $ p $ System.out.println(EntityManager.class.getProtectionDomain() .getCodeSource() .getLocation());

查看指向您的位置并摆脱那件神器。

啊,现在我终于看到了问题。摆脱这一点:

<依赖关系> < groupId> org.springframework< / groupId> < artifactId> spring-jpa< / artifactId> < version> 2.0.8< / version> < /依赖关系>

并将其替换为

<依赖性> < groupId> org.springframework< / groupId> < artifactId> spring-orm< / artifactId> < version> 3.2.5.RELEASE< / version> < /依赖关系>

另一方面,您应该将所有测试库(spring-test,easymock等)设置为

< scope> test< / scope>

I am trying to run a dbtest but I get the following error :

"Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [root-context.xml]: Invocation of init method failed; nested exception is java.lang.AbstractMethodError: org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode;"

And because of that I also get the following error:

"Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'personRepository' defined in class path resource [root-context.xml]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [root-context.xml]: Invocation of init method failed; nested exception is java.lang.AbstractMethodError: org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode;

So we have to take alook at my root-context file and it look the following :

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="www.springframework/schema/beans" xmlns:xsi="www.w3/2001/XMLSchema-instance" xsi:schemaLocation="www.springframework/schema/beans www.springframework/schema/beans/spring-beans.xsd"> <!-- Root Context: defines shared resources visible to all other web components <bean id="personService" class="se.lowdin.civilforsvaret.webapp.services.PersonServiceImpl" /> --> <bean id="personRepository" class="se.lowdin.civilforsvaret.webapp.repositories.PersonRepositoryJpa" /> <!-- Database --> <bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost/civilforsvaret11" /> <property name="username" value="bla" /> <property name="password" value="bla" /> </bean> <!-- Entity Manager --> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="dataSource" ref="datasource" /> <property name="persistenceUnitName" value="civilforsvaret" /> </bean> <!-- Transaction Manager --> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean> </beans>

And the persisence.xml looks the following :

<persistence xmlns="java.sun/xml/ns/persistence" xmlns:xsi="www.w3/2001/XMLSchema-instance" xsi:schemaLocation="java.sun/xml/ns/persistence java.sun/xml/ns/persistence/persistence_2_0.xsd" version="2.0"> <persistence-unit name="civilforsvaret" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" /> <property name="hibernate.hbm2ddl.auto" value="create-drop" /> <property name="hibernate.show_sql" value="true"/> </properties> </persistence-unit> </persistence>

And this is my pom.xml file :

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="maven.apache/POM/4.0.0" xmlns:xsi="www.w3/2001/XMLSchema-instance" xsi:schemaLocation="maven.apache/POM/4.0.0 maven.apache/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>se.lowdin</groupId> <artifactId>civilforsvaret</artifactId> <name>civilforsvaret-webbapp</name> <packaging>war</packaging> <version>1.0.0-BUILD-SNAPSHOT</version> <properties> <java-version>1.6</java-version> <org.springframework-version>3.1.1.RELEASE</org.springframework-version> <org.aspectj-version>1.6.10</org.aspectj-version> <org.slf4j-version>1.6.6</org.slf4j-version> </properties> <dependencies> <!-- Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${org.springframework-version}</version> <exclusions> <!-- Exclude Commons Logging in favor of SLF4j --> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${org.springframework-version}</version> </dependency> <!-- AspectJ --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>${org.aspectj-version}</version> </dependency> <!-- MySql connection --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.24</version> </dependency> <!-- Logging --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${org.slf4j-version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>${org.slf4j-version}</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${org.slf4j-version}</version> <scope>runtime</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.15</version> <exclusions> <exclusion> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> </exclusion> <exclusion> <groupId>javax.jms</groupId> <artifactId>jms</artifactId> </exclusion> <exclusion> <groupId>com.sun.jdmk</groupId> <artifactId>jmxtools</artifactId> </exclusion> <exclusion> <groupId>com.sun.jmx</groupId> <artifactId>jmxri</artifactId> </exclusion> </exclusions> <scope>runtime</scope> </dependency> <!-- @Inject --> <dependency> <groupId>javax.inject</groupId> <artifactId>javax.inject</artifactId> <version>1</version> </dependency> <!-- Servlet --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- Test --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.7</version> <scope>test</scope> </dependency> <dependency> <groupId>org.easymock</groupId> <artifactId>easymock</artifactId> <version>3.1</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>4.3.0.CR1</version> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.3.174</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>3.2.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jpa</artifactId> <version>2.0.8</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>3.2.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-jpa</artifactId> <version>1.4.2.RELEASE</version> </dependency> <dependency> <groupId>org.hibernate.javax.persistence</groupId> <artifactId>hibernate-jpa-2.0-api</artifactId> <version>1.0.1.Final</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-eclipse-plugin</artifactId> <version>2.9</version> <configuration> <additionalProjectnatures> <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature> </additionalProjectnatures> <additionalBuildcommands> <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand> </additionalBuildcommands> <downloadSources>true</downloadSources> <downloadJavadocs>true</downloadJavadocs> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.5.1</version> <configuration> <source>1.6</source> <target>1.6</target> <compilerArgument>-Xlint:all</compilerArgument> <showWarnings>true</showWarnings> <showDeprecation>true</showDeprecation> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <configuration> <mainClass>org.test.int1.Main</mainClass> </configuration> </plugin> </plugins> </build> </project>

I am a complete noob with Spring MVC and cant find the problem.

解决方案

This sounds like a ClassLoader conflict. I'd bet you have the javax.persistence api 1.x on the classpath somewhere, whereas Spring is trying to access ValidationMode, which was only introduced in JPA 2.0.

Since you use Maven, do mvn dependency:tree, find the artifact:

<dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> <version>1.0</version> </dependency>

And remove it from your setup. (See Excluding Dependencies)

AFAIK there is no such general distribution for JPA 2, but you can use this Hibernate-specific version:

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

OK, since that doesn't work, you still seem to have some JPA-1 version in there somewhere. In a test method, add this code:

System.out.println(EntityManager.class.getProtectionDomain() .getCodeSource() .getLocation());

See where that points you and get rid of that artifact.

Ahh, now I finally see the problem. Get rid of this:

<dependency> <groupId>org.springframework</groupId> <artifactId>spring-jpa</artifactId> <version>2.0.8</version> </dependency>

and replace it with

<dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>3.2.5.RELEASE</version> </dependency>

On a different note, you should set all test libraries (spring-test, easymock etc.) to

<scope>test</scope>

更多推荐

创建名为'entityManagerFactory'的bean时出错

本文发布于:2023-10-28 17:51:48,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:entityManagerFactory   bean

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!