記一次部署時報java.lang.NoSuchMethodError:javax.persistence.spi.PersistenceUnitInfo.getValidationMode()Ljavax / persistence / ValidationMode;的解決辦法


樓主在部署war包的時候,本地啟動不報錯,服務器商報如下問題:

Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; 
nested exception is java.lang.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode;

 這個方法明顯是jar包下的方法找不到,而非自寫的方法或者類;但是我們又在pom文件中引用了該類,且在war包解壓lib文件中確實有此類;

網上很多說是依賴項版本問題,說因為引入了JPA 1 API,但方法getValidationMode僅在JPA 2之后才存在,建議將pom文件中jpa依賴改成如下:

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

但樓主本來就用的JPA 2版本;最后只能懷疑是jar包沖突,

       <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>1.1.4</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.persistence</groupId>
                    <artifactId>persistence-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

將pom中依賴修改為此問題就解決了!!

此處需要exclusions來進行排除依賴。
例如這樣一個情況,工程中引入了A,A依賴B,但是B的版本過舊。
此時可以使用exclusions排除該傳遞性依賴,並顯示聲明一個最新版本的B依賴。

所以。。。。。此處就不會根據mapper-spring-boot-starter找到其底下老版本的persistence而導致沒有ValidationMode方法了,通過exclusions聲明一個新依賴,就成功解決問題啦~

以上~   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM