Lor*_*ill 5 nullpointerexception spring-data-jpa kotlin spring-boot
我将 Spring Boot 与 DDD 应用程序一起使用,其中每个聚合根实体都有一个名为 events 的瞬态字段,该字段不会保留在数据库中:
@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)
}
}
Run Code Online (Sandbox Code Playgroud)
当我自己编写添加新实体时,它工作得很好。但是,当我从存储库中使用查找器方法加载实体时,瞬态属性事件似乎为空,而不是可变列表。这给了我一个空指针异常,我花了一段时间才找出发生这种情况的原因。
我尝试将其更改为 Lateinit 属性,但它不起作用。到目前为止,我唯一的解决方法是为每个涉及事件的方法添加一个 null 检查并初始化它,但这个解决方案不是最优的(有趣的是,当我用 Maven 打包它时,它警告我 null 的条件始终是假的,但它恰好是真的):
if(events == null) events = mutableListOf()
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更好的方法来处理这个问题?也许@Transient 是这里的问题?或者也许自定义初始值设定项会有所帮助?有人知道如何以良好而优雅的 Kotlin 方式解决这个问题,而不是愚蠢的空检查吗?
| 归档时间: |
|
| 查看次数: |
778 次 |
| 最近记录: |