天天看點

Error creating bean ‘entityManagerFactory‘ defined in class path resource [HibernateJpaConfiguration

前面的報錯資訊

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

然後找到後面描述

Description:

An attempt was made to call a method that does not exist. The attempt was made from the following location:

org.hibernate.jpa.boot.internal.PersistenceUnitInfoDescriptor.getValidationMode(PersistenceUnitInfoDescriptor.java:88)

The following method did not exist:

javax.persistence.spi.PersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode;

The method’s class, javax.persistence.spi.PersistenceUnitInfo, is available from the following locations:

jar:file:/E:/RepMaven/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar!/javax/persistence/spi/PersistenceUnitInfo.class

jar:file:/E:/RepMaven/javax/persistence/javax.persistence-api/2.2/javax.persistence-api-2.2.jar!/javax/persistence/spi/PersistenceUnitInfo.class

It was loaded from the following location:

file:/E:/RepMaven/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar

發現是persistence-api的jar包版本沖突問題,原來是我在pom.xml檔案中配置了tk.mybatis造成的,因為tk.mybatis會自動引用依賴引入persistence-api-1.0.jar包,而persistence-api-1.0.jar的PersistenceUnitInfo類中并沒有getValidationMode()方法,而在springboot(2.1.0.RELEASE)中自動引入的依賴persistence-api-2.2.jar包的PersistenceUnitInfo類則有實作getValidationMode()方法。此時兩個類沖突了,導緻報了以下的錯誤。解決方法就是在tk.mybatis中排除掉persistence-api-1.0.jar的自動依賴,如下:

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