消除Spring Data中编译的类的歧义

问题描述 投票:1回答:1

我试图使用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>)持久保存文档时,我得到了所有重写属性(活动,开始,结束和生命周期)的模糊字段映射。

欣赏任何想法或解决方法。

mongodb spring-boot spring-data-mongodb
1个回答
0
投票

tl; dr在撰写本文时,无法绕过这个问题。

如果一个“阴影”另一个属性,映射层当前无法分辨应该保留哪些属性。因此,我们在实体元数据中进行了此检查。

现在,如果你试图通过添加类似的东西来放松kazlin类型的BasicMongoPersistentEntity中的独特字段检查

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

存储库将不再在创建时投诉。但是,映射层仍然需要根据检查顺序确定要保留哪些呈现的属性,它们仍然会相互覆盖,并且很可能最终会出现错误状态。特别是当用val覆盖var时。

我已经打开DATAMONGO-2250进一步调查,看看我们能做些什么。

© www.soinside.com 2019 - 2024. All rights reserved.