Intellij Idea 在Kotlin中,当标记为@Column(nullable = false)时,被查询的实体必须始终写为“!!”

wj8zmpe1  于 2023-01-04  发布在  Kotlin
关注(0)|答案(1)|浏览(174)

在kotlin中,编写实体类时,属性的默认值为null,属性的注解为@Column(nullable = false),表示不能为空,例如下面username

@Entity
class Users {
    @Column(nullable = false)
    var username: String? = null
}

findById查询时返回以下结果:val user = Users(username:"MyName")
当调用user. username!!时,我必须带!!,因为注解是@Column(nullable = false)
这就产生了一个问题:我拿到username的时候,总是要检查username@Column注解有没有标记为空,然后才能判断要不要写!!,这是很麻烦的,而且总是不小心把不该写的写在!!上。
当我标记@Column(nullable = false)而不写!!时,我可以做些什么来防止IDEA编译器报告错误?
如果它是这样写的(给属性一个默认值):

@Column(nullable = false)
    var username: String = "default"

使用findById查询时,必须带withIgnorePaths,比较麻烦:

val matcher = ExampleMatcher.matching().withIgnorePaths("username", ...))
Example.of(Users(username:""),matcher)
cmssoen2

cmssoen21#

在您的情况下避免!!的方法。
1.最简单的方法是,使username不为空,因此每次创建Users时都需要提供username
1.创建一个新层,比如UsersDto,看起来像这样:

class UsersDto {
    var username: String
}

这需要在数据层和实体之间实现一些Map。然而,你需要处理可为空的username,你可以在Map器!!中强制执行(但只能执行一次)或者

dto.username = entity.username ?: throw IllegalArgumentException("Broken user, username is null!")

相关问题