gpt4 book ai didi

spring-boot - Kotlin 和 Spring 启动, transient 属性未正确初始化

转载 作者:行者123 更新时间:2023-12-03 21:00:43 33 4
gpt4 key购买 nike

我将 spring boot 与 DDD 应用程序一起使用,其中每个聚合根实体都有一个名为 events 的 transient 字段,这些字段不会持久保存在数据库中:

@MappedSuperclass
abstract class AggregateRoot<TId>(id: TId) : DomainModel<TId>(id) {

@Transient
private var events : MutableList<DomainEvent> = mutableListOf()

fun occurredEvents(): List<DomainEvent>{
val events = this.events.toMutableList()
this.events.clear()
return events
}

fun addEvent(event: DomainEvent){
events.add(event)
}

fun removeEvent(event: DomainEvent){
events.remove(event)
}
}

当我通过自己编写新实体来添加新实体时,它工作正常。但是,当我从存储库中加载带有 finder 方法的实体时,似乎 transient 属性 事件 为空,而不是可变列表。这给了我一个空指针异常,我花了一段时间才找出它发生的原因。

我试图将其更改为 lateinit 属性,但它不起作用。到目前为止我唯一的解决方法是为涉及事件的每个方法添加一个空检查并初始化它,但这个解决方案是次优的(有趣的是,当我用 Maven 打包它时,它警告我空的条件总是假,但它恰好是真的):
if(events == null) events = mutableListOf()

我想知道是否有更好的方法来处理这个问题?也许@Transient 是这里的问题?或者也许自定义初始化程序会有所帮助?有谁知道如何以一种优雅而优雅的 Kotlin 方式解决这个问题,而不是愚蠢的空检查?

最佳答案

将初始化移动到一个单独的方法中并用 @PostConstruct 注释它.

关于spring-boot - Kotlin 和 Spring 启动, transient 属性未正确初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57960630/

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