Spring boot 如何在jooq查询中检查左侧联接上的记录是否为全空

Spring boot 如何在jooq查询中检查左侧联接上的记录是否为全空,spring-boot,kotlin,spring-data,dsl,jooq,Spring Boot,Kotlin,Spring Data,Dsl,Jooq,我尝试从另一个表上具有左连接的表中获取记录。无法找到第二个表中的信息,但我希望第一个表中的信息 val citizenship = Tables.COUNTRIES.`as`("citizenship") try { return context.selectFrom(Tables.CLIENT_PROJECTIONS .leftJoin(citizenship).on(

我尝试从另一个表上具有左连接的表中获取记录。无法找到第二个表中的信息,但我希望第一个表中的信息

    val citizenship = Tables.COUNTRIES.`as`("citizenship")
    try {
        return context.selectFrom(Tables.CLIENT_PROJECTIONS
                .leftJoin(citizenship).on(
                        Tables.CLIENT_PROJECTIONS.CITIZENSHIP_COUNTRY_CODE.eq(
                                citizenship.CODE_ALPHA2
                        )
                )
        ).where(Tables.CLIENT_PROJECTIONS.ID.eq(id)).fetchOne {
            val clientProjection = ClientProjectionMapper.map(it.into(Tables.CLIENT_PROJECTIONS)) ?: return@fetchOne null
            clientProjection.citizenship = CountryMapper.map(it.into(citizenship))
            clientProjection
        }
    } catch (ex: DataAccessException) {
        logger.error("Failed to access to database", ex)
        throw ex
    } 
我将CountriesRecord中的数据转换为
CountryMapper
中的实体:

object CountryMapper : RecordMapper<CountriesRecord, Country> {
  override fun map(record: CountriesRecord?): Country? = when {
    record != null -> {
        Country(
                countryCode = record.codeAlpha,
                title = record.title
        )
    }
    else -> {
        null
    }
  }
}
对象映射器:记录映射器{
覆盖趣味地图(记录:CountriesRecord?:Country?=何时{
记录!=空->{
国家(
countryCode=record.codeAlpha,
title=record.title
)
}
其他->{
无效的
}
}
}
但是,如果查询在
CountriesRecord
my
map
方法的每个字段中返回null,则接收一个不可为null的实体,但该实体的每个字段都为空


我可以检查
国家记录的每个字段是否为空,但我认为这不是个好主意。我能用另一种更好的方法检查一下吗?也许我应该向数据库写入更正确的查询?

SQL中的
左连接就是这样做的。它为左联接表的所有列生成空值,因为联接的
ON
子句中没有与之匹配的列

您不必检查每一列是否为空。主键已经足够好了,因为它应该有一个
notnull
约束,这意味着如果主键值为NULL(
record.codeapha
),那么这一定是因为
左连接

将第二个映射器更改为:

对象映射器:记录映射器{
覆盖趣味地图(记录:CountriesRecord?:Country?=何时{
记录?.codeAlpha!=空->{
国家(
countryCode=record.codeAlpha,
title=record.title
)
}
其他->{
无效的
}
}
}