gpt4 book ai didi

java - 为什么我的中间存储库接口(interface)在从 Spring Data JPA 1.4.x 升级到更新版本(例如 1.7.1)后会出现问题?

转载 作者:行者123 更新时间:2023-11-30 07:04:52 25 4
gpt4 key购买 nike

No [ManagedType] was found for the key class [java.lang.Object] in the Metamodel - please verify that the [Managed] class was referenced in persistence.xml using a specific <class>java.lang.Object</class> property or a global <exclude-unlisted-classes>false</exclude-unlisted-classes> element.
at org.eclipse.persistence.internal.jpa.metamodel.MetamodelImpl.entityEmbeddableManagedTypeNotFound(MetamodelImpl.java:173) ~[org.eclipse.persistence.jpa-2.5.2.jar:na]
at org.eclipse.persistence.internal.jpa.metamodel.MetamodelImpl.managedType(MetamodelImpl.java:495) ~[org.eclipse.persistence.jpa-2.5.2.jar:na]

这很奇怪,因为恢复到 Spring Data JPA 1.4.3.RELEASE 解决了这个问题。但我们想了解造成这种情况的原因。我们使用的接口(interface)存储库如下所示

@Repository
public interface BaseRepository<T, K extends Serializable>
extends JpaRepository<T, K>,
QueryDslPredicateExecutor<T> {
}

@Repository
public interface PersonRepository extends BaseRepository<Person, Long> { }

与此同时,我们将使用旧版本,但我不确定去哪里查找以解决此问题。有什么想法吗?

最佳答案

tl;dr

reference documentation 中所述,中间存储库接口(interface)需要用@NoRepositoryBean注解。一般来说,Spring Data Repositories不需要使用@Repository注解。

详情

1.4.x 之前的 Spring Data JPA 版本对存储库接口(interface)使用惰性实例化模型。这意味着如果没有人明确引用特定的存储库接口(interface),则不会创建存储库 bean,因此不会评估通用类型。

在 Spring Data 1.5 M1 中,我们更改了它(更准确地说,Spring Data Commons 1.7 M1 - 请参阅 this ticket ,但这是 JPA 1.5 M1 所依赖的)以与整个 Spring 容器中使用的默认 bean 实例化模型保持一致(默认实例化)。

这意味着,以前错误的中间接口(interface)(如您的 BaseRepository)现在开始使上下文引导失败,因为它们的泛型信息在启动时被评估。如上所述,建议的解决方法是在中间接口(interface)上使用 @NoRepositoryBean,因为这将导致接口(interface)被 Spring Data 忽略,并且根本不会尝试为其创建 Spring bean。

关于java - 为什么我的中间存储库接口(interface)在从 Spring Data JPA 1.4.x 升级到更新版本(例如 1.7.1)后会出现问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27250108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com