将 jooq 与嵌套记录一起使用时(请参阅:https://www.jooq.org/doc/latest/manual/sql-building/column-expressions/nested-records/)和临时转换(请参阅:) https://www.jooq.org/doc/latest/manual/coming-from-jpa/from-jpa-manytoone/),我找不到处理“可空 1:1 关系”的好例子”.
以下示例:
我已经尝试过并让它工作,但它似乎有点样板。
...
row(
PRODUCT.editor().USERID,
PRODUCT.editor().FIRSTNAME,
PRODUCT.editor().LASTNAME
).convertFrom(r -> (r.value1() == null) ? null : mapping(UserDTO::new).apply(r)),
...
请注意,我们不需要在此处显式定义
leftJoin
,因为 jooq 默认情况下会为 Path-Expression 使用 Left Join(对于 mariadb 为左外连接)(请参阅“默认 JOIN 类型”:https://www .jooq.org/doc/latest/manual/sql-building/sql-statements/select-statement/implicit-join/),因为我们有“可为空父级”的情况。
如果连接结果中
USERID
列返回NULL,我们可以确定用户表中没有与外键匹配的用户行。
这可以通过
(r.value1() == null) ? null : ...
子句来完成,当第一列 (USERID
) 返回 NULL 时,该子句返回 NULL。
row()
上的 NULL 值,而无需此处看到的显式转换(也许借助包含 FK 信息的路径表达式)?