我有一个旧版 spring mvc Web 应用程序,它使用 spring data jpa 1.9.5。当我添加 spring data mongodb 1.9.5 的依赖项时,相同的应用程序就会中断。
POM:
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.9.5.RELEASE</version>
</dependency>
<!-- Spring Data JPA -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.9.5.RELEASE</version>
</dependency>
显示错误
引起:java.lang.AbstractMethodError:org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(Ljava/lang/reflect/Method;Lorg/springframework/data/repository/core/RepositoryMetadata;Lorg/ springframework/data/projection/ProjectionFactory;Lorg/springframework/data/repository/core/NamedQueries;)Lorg/springframework/data/repository/query/RepositoryQuery;
在 org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor。(RepositoryFactorySupport.java:435)
在
org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:220)
spring data jpa 哪个版本与 spring data mongodb 兼容。 ?
我已经回答了类似问题。通常,您可以将
spring-data-mongodb
和 spring-data-jpa
数据模块组合在一个应用程序中,应该没什么大不了的。 AbstractMethodError
通常不应该发生,因为抽象方法的调用应该被编译器捕获。
如果发生这种情况,这基本上意味着在运行时,JVM 加载了某个抽象类的不兼容版本(在您的情况下,它很可能是
JpaQueryLookupStrategy.AbstractQueryLookupStrategy
类)。
因此,我建议扔掉任何 spring-data 项目版本,只使用
spring-boot-starter-parent
作为父 pom,或者如果不可能,只需添加 spring-boot-dependencies
作为范围为 import
的依赖管理,例如这(将版本更改为您喜欢的版本):
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.1.5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
作为旁注,大多数 spring-data 模块可以组合在一个应用程序中,但是需要满足一些条件(再次检查我对类似问题的回答),但情况并非总是如此。例如,长期以来,
spring-data-jr2dbc
与 spring-data-jdbc
在一个应用程序中使用不兼容(现在我们在这里修复了它)。