gpt4 book ai didi

java - 使用 JOOQ 中的 RecordMapper 将派生列映射到 POJO

转载 作者:太空宇宙 更新时间:2023-11-04 09:04:09 25 4
gpt4 key购买 nike

我有一个表票证,我在其中插入票证,并有一个创建者字段,用于存储该记录创建者的 UserId 整数。在获取过程中,我加入用户表并连接名字和姓氏,并且我的 DTO 具有创建者连接名称的字段createdBy。如何映射派生字段?这是我的引用https://www.jooq.org/doc/3.13/manual/sql-execution/fetching/pojos/我似乎找不到提供这样的场景

问题不在于加入。问题是映射连接后派生的字符串createdBy,而在jooq生成的记录类中是一个整数,因为在数据库表中我存储了userId。

    List<MyTickets> mytickets = create.select(....FIELDS).from(TICKETS_).fetch().into(MyTickets.class);
@Override
public Field<Integer> field9() {
return Tickets.TICKETS_.CREATEDBY;
}

最佳答案

在我的回答中,我假设您的计算列将被称为 CREATED_BY_NAME,而不是 CREATED_BY,后者是一个已使用的名称,以避免混淆。

如果这是您经常做的事情,您可能会感兴趣一些选项:

  • 使用 View 生成此备用 CREATED_BY_NAME 列。许多数据库也可以插入/更新 View ,因此使用 View 替换表不会造成很大的损失。对于您的客户端逻辑来说,此列的来源将是透明的。如果您想使用 UpdatableRecord,您必须使用 synthetic primary key flag 告诉 jOOQ 的代码生成器 View 的底层主键是什么。 .
  • 与上述 View 类似,您可以使用 GENERATED ALWAYS AS ... 语法(或您的方言使用的任何语法)在表上使用计算列。并非所有方言都支持此功能,但这是一个很好的功能,可以将表转换为 View ,而无需额外的 View 对象。
  • 如果您想在 jOOQ 代码中手动计算此列,您可以编写自己的 DTO/POJO 对象,或者使用 custom code section 扩展代码生成器。 ,您可以在其中生成相关属性/getter/setter。此方法仅适用于可变 POJO,因为您无法修改不可变 POJO 的构造函数。
  • 您还可以为所有受影响的 POJO 指定一个基类,并使用生成器策略( programmaticconfigurative )注入(inject)该基类。然后,基类可以实现 CREATED_BY_NAME 等列的所有 getter/setter。
  • 您还可以使用结构类型。您不必将所有列映射到 POJO 中。您还可以将一些列映射到生成的 POJO(不包括 CREATED_BY_NAME)并单独映射 CREATED_BY_NAME 列。只需保留对 jOOQ Result 和/或 Record 的引用,并对其执行多次 map/intoXYZ() 调用即可。

关于java - 使用 JOOQ 中的 RecordMapper 将派生列映射到 POJO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60433834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com