如何在jooq查询中左连接时检查记录是否为空

尼基塔代表

我尝试从左连接另一张表的表中获取一条记录。找不到第二张表中的信息,但我希望第一张表中有信息。

    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
    } 

我将CountrysRecord中的数据转换为Entity 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我的map方法的每个字段中返回null,则会收到一个不可为空的实体,但该实体的每个字段均为空。

我可以检查每个字段CountriesRecord是否为空,但是我认为这不是一个好主意。我可以通过其他更好的方法检查它吗?也许我应该向数据库编写更正确的查询?

卢卡斯·埃德(Lukas Eder)

LEFT JOINSQL中的A完全可以做到这一点。对于连接的ON子句中没有匹配项的左连接表的所有列,它会产生空值

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

将您的第二个映射器更改为此:

object CountryMapper : RecordMapper<CountriesRecord, Country> {
  override fun map(record: CountriesRecord?): Country? = when {
    record?.codeAlpha != null -> {
      Country(
        countryCode = record.codeAlpha,
        title = record.title
      )
    }
    else -> {
      null
    }
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在SPARQL查询中检查字符串是否为空或为空?

来自分类Dev

如何在linq中查询并检查传递的值是否为空

来自分类Dev

Mysql查询如何在进行左连接时避免行空/空字段

来自分类Dev

如何在XSLT中检查属性是否为空?

来自分类Dev

如何在tcl中检查变量是否为空

来自分类Dev

如何在tcsh Shell中检查变量是否为空?

来自分类Dev

如何在Golang中检查地图是否为空?

来自分类Dev

如何在Ruby中检查ARGF是否为空

来自分类Dev

如何在Postgres中检查数组是否为空

来自分类Dev

如何在C中检查String是否为空

来自分类Dev

如何在Java中检查JSONArray是否为空?

来自分类Dev

如何在C ++中检查地图是否为空?

来自分类Dev

如何在VBA中检查表是否为空?

来自分类Dev

如何在PHP中检查数组是否为空(Codeigniter)

来自分类Dev

如何在Android中检查拖放是否为空

来自分类Dev

如何在Kotlin中检查序列是否为空

来自分类Dev

如何在C ++中检查分区是否为空

来自分类Dev

如何在Flutter中检查JSON数组是否为空

来自分类Dev

如何在C#中检查CKEditor是否为空

来自分类Dev

Xpages如何在JavaScript中检查日期是否为空?

来自分类Dev

如何在Android中检查表是否为空?

来自分类Dev

如何在Android中检查Interger是否为空

来自分类Dev

如何在Android中检查拖放是否为空

来自分类Dev

如何检查参数是否为空并在查询中检查它

来自分类Dev

如何在IF条件下检查查询是否为空?

来自分类Dev

如何简化逻辑检查数组记录中的所有单元格是否为空,使用for

来自分类Dev

如何检查haskell记录中的所有Maybe字段是否全部为空?

来自分类Dev

如何简化逻辑检查数组记录中的所有单元格是否为空,使用for

来自分类Dev

如何在LINQ to SQL中的子查询中按组检查记录是否存在

Related 相关文章

  1. 1

    如何在SPARQL查询中检查字符串是否为空或为空?

  2. 2

    如何在linq中查询并检查传递的值是否为空

  3. 3

    Mysql查询如何在进行左连接时避免行空/空字段

  4. 4

    如何在XSLT中检查属性是否为空?

  5. 5

    如何在tcl中检查变量是否为空

  6. 6

    如何在tcsh Shell中检查变量是否为空?

  7. 7

    如何在Golang中检查地图是否为空?

  8. 8

    如何在Ruby中检查ARGF是否为空

  9. 9

    如何在Postgres中检查数组是否为空

  10. 10

    如何在C中检查String是否为空

  11. 11

    如何在Java中检查JSONArray是否为空?

  12. 12

    如何在C ++中检查地图是否为空?

  13. 13

    如何在VBA中检查表是否为空?

  14. 14

    如何在PHP中检查数组是否为空(Codeigniter)

  15. 15

    如何在Android中检查拖放是否为空

  16. 16

    如何在Kotlin中检查序列是否为空

  17. 17

    如何在C ++中检查分区是否为空

  18. 18

    如何在Flutter中检查JSON数组是否为空

  19. 19

    如何在C#中检查CKEditor是否为空

  20. 20

    Xpages如何在JavaScript中检查日期是否为空?

  21. 21

    如何在Android中检查表是否为空?

  22. 22

    如何在Android中检查Interger是否为空

  23. 23

    如何在Android中检查拖放是否为空

  24. 24

    如何检查参数是否为空并在查询中检查它

  25. 25

    如何在IF条件下检查查询是否为空?

  26. 26

    如何简化逻辑检查数组记录中的所有单元格是否为空,使用for

  27. 27

    如何检查haskell记录中的所有Maybe字段是否全部为空?

  28. 28

    如何简化逻辑检查数组记录中的所有单元格是否为空,使用for

  29. 29

    如何在LINQ to SQL中的子查询中按组检查记录是否存在

热门标签

归档