Ktorm查询未返回预期Null值问题求助
问题解决:Ktorm实体可空属性未返回Null值
核心问题定位
你的Dao类中,对应数据库可空字段的列类型定义错误,使用了不可空的列类型方法(如long()、varchar()),导致Ktorm无法正确识别数据库中的Null值,进而无法映射到实体的可空属性上。
修正方案
将Dao类中对应数据库可空字段的列类型替换为可空版本的方法:
val Database.appeals get() = this.sequenceOf(AppealDao) object AppealDao : Table<Appeal>("appeals") { val id = long("id").primaryKey().bindTo { it.id } val userCreatorId = long("user_creator_id").references(UserDao) { it.userCreator } // 替换为longNullable适配可空外键列 val userEmployeeId = longNullable("user_employee_id").references(UserDao) { it.userEmployee } val statusId = long("status_id").references(StatusDao) { it.status } val title = varchar("title").bindTo{ it.title } // 替换为longNullable适配可空外键列 val userDeleteId = longNullable("user_delete_id").references(UserDao) { it.userDelete } // 替换为varcharNullable适配可空字符串列 val deleteReason = varcharNullable("delete_reason").bindTo{ it.deleteReason } val isDeleted = boolean("is_deleted").bindTo { it.isDeleted } val dateCreate = jdbcTimestamp("date_create").bindTo { it.dateCreate } }
原理说明
Ktorm中:
long()、varchar()等方法对应数据库的不可空列,会默认列值非空,遇到Null时无法正确映射longNullable()、varcharNullable()对应数据库的可空列,能够正确识别并映射Null值到实体的可空属性
你的数据库表中user_employee_id、user_delete_id、delete_reason都是可空字段,必须使用对应可空版本的列类型方法,才能让Ktorm将数据库Null值正确赋值给实体的可空属性。
验证步骤
- 替换Dao类中的列类型定义
- 重新运行查询逻辑
- 检查返回的
Appeal实体,对应可空属性应正确显示Null值
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

