消除 Spring 数据中编译类的歧义



我正在尝试使用Spring在MongoDB中编写文档,并且得到了一个org.springframework.data.mapping.MappingException: Ambiguous field mapping detected!

问题是这种歧义来自一个继承自另一个编译类的编译类,所以我不能使用@Field注释来手动更改字段名称。

有没有办法告诉 Spring 如何在不修改类代码的情况下解决模棱两可的字段映射?

我尝试保留的类如下所示:

data class BehaviouralEvent(
    val sources: Set<BehaviouralEvent>,
    override val activity: Activity,
    override val start: Instant = Instant.now(),
    override val end: Instant = Instant.now(),
    override val lifecycle: Lifecycle = Lifecycle.UNKNOWN
) : Event(activity, start, end, lifecycle) {
    constructor(
        sources: Set<BehaviouralEvent>,
        activityID: String,
        start: Instant = Instant.now(),
        end: Instant = Instant.now(),
        lifecycle: Lifecycle = Lifecycle.UNKNOWN
    ) : this(sources, Activity.from(activityID), start, end, lifecycle)
    constructor(
        sources: Set<BehaviouralEvent>,
        event: Event
    ) : this(sources, event.activity, event.start, event.end, event.lifecycle)
}

当我尝试使用此结构(带有MongoRepository<BehaviouralEvent, String>(保留文档时,我得到了所有被覆盖属性(活动、开始、结束和生命周期(的模糊字段映射。

感谢任何想法或解决方法。

tl;dr 在撰写本文时,没有办法解决这个问题。

映射层当前无法判断如果一个属性"遮蔽"另一个属性,则应保留哪些属性。因此,我们在实体元数据中进行此检查。

现在,如果您试图通过添加类似的东西来放宽 Kotlin 类型的唯一字段检查BasicMongoPersistentEntity

if(isKotlinType(property.getOwner()) && !propety.hasGetter()) {
    return;
}

存储库在创建时将不再抱怨。但是,映射层仍然需要确定要保留哪些呈现的属性,具体取决于检查顺序,它们仍然相互覆盖,并且很可能最终会保留错误的状态。尤其是在用var覆盖val时。

我已经打开了DATAMONGO-2250进行进一步调查,看看我们是否可以做些什么。

相关内容

  • 没有找到相关文章

最新更新