创建名为'entityManagerFactory的bean时出错

 爱电影麦兜兜 发布于 2023-02-07 20:25

我正在尝试运行dbtest但是我收到以下错误:

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

因此,我也得到以下错误:

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

所以我们必须对我的root-context文件进行监视,它看起来如下:




    

     


    
        
        
        
        
        
        

        
        
                
                
        

        
        
                
        


persisence.xml看起来如下:



    
                org.hibernate.ejb.HibernatePersistence
                
                        
                        
                        
                
        


这是我的pom.xml文件:



    4.0.0
    se.lowdin
    civilforsvaret
    civilforsvaret-webbapp
    war
    1.0.0-BUILD-SNAPSHOT
    
        1.6
        3.1.1.RELEASE
        1.6.10
        1.6.6
    
    
        
        
            org.springframework
            spring-context
            ${org.springframework-version}
            
                
                
                    commons-logging
                    commons-logging
                 
            
        
        
            org.springframework
            spring-webmvc
            ${org.springframework-version}
        

        
        
            org.aspectj
            aspectjrt
            ${org.aspectj-version}
           

        

          
            mysql
            mysql-connector-java
            5.1.24
        

        
        
            org.slf4j
            slf4j-api
            ${org.slf4j-version}
        
        
            org.slf4j
            jcl-over-slf4j
            ${org.slf4j-version}
            runtime
        
        
            org.slf4j
            slf4j-log4j12
            ${org.slf4j-version}
            runtime
        
        
            log4j
            log4j
            1.2.15
            
                
                    javax.mail
                    mail
                
                
                    javax.jms
                    jms
                
                
                    com.sun.jdmk
                    jmxtools
                
                
                    com.sun.jmx
                    jmxri
                
            
            runtime
        

        
        
            javax.inject
            javax.inject
            1
        

        
        
            javax.servlet
            servlet-api
            2.5
            provided
        
        
            javax.servlet.jsp
            jsp-api
            2.1
            provided
        
        
            javax.servlet
            jstl
            1.2
        

        
        
            junit
            junit
            4.7
            test
           

        
        org.easymock
        easymock
        3.1
    
        
            org.hibernate
            hibernate-entitymanager
            4.3.0.CR1
        
        
            com.h2database
            h2
            1.3.174
        
        
            org.springframework
            spring-test
            3.2.5.RELEASE
        
        
            org.springframework
            spring-jpa
            2.0.8
        
        
            org.springframework
            spring-jdbc
            3.2.5.RELEASE
        
        
            org.springframework.data
            spring-data-jpa
            1.4.2.RELEASE
        
        
            org.hibernate.javax.persistence
            hibernate-jpa-2.0-api
            1.0.1.Final
        
    
    
        
            
                maven-eclipse-plugin
                2.9
                
                    
                        org.springframework.ide.eclipse.core.springnature
                    
                    
                        org.springframework.ide.eclipse.core.springbuilder
                    
                    true
                    true
                
            
            
                org.apache.maven.plugins
                maven-compiler-plugin
                2.5.1
                
                    1.6
                    1.6
                    -Xlint:all
                    true
                    true
                
            
            
                org.codehaus.mojo
                exec-maven-plugin
                1.2.1
                
                    org.test.int1.Main
                
            
        
    

我是Spring MVC的完整菜鸟,无法找到问题所在.

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

    既然你使用Maven,那么mvn dependency:tree找到工件:

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

    并从您的设置中删除它.(请参阅排除依赖项)

    AFAIK没有JPA 2的这种通用发行版,但你可以使用这个特定于Hibernate的版本:

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

    好吧,因为那不起作用,你似乎仍然在那里有一些JPA-1版本.在测试方法中,添加以下代码:

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

    看看它指向你的地方并摆脱那件神器.


    啊,现在我终于看到了问题.摆脱这个:

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

    并替换它

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

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

    <scope>test</scope>
    

    2023-02-07 20:28 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有