无法使用自定义生成器策略为 getter 名称创建记录

Posted

技术标签:

【中文标题】无法使用自定义生成器策略为 getter 名称创建记录【英文标题】:Unable to create records using custom generator strategy for getter names 【发布时间】:2021-06-16 13:26:23 【问题描述】:

我正在使用 jOOQ 3.13.1,dropwizard 2.0.7。为了一起制作 jOOQ 和 dropwizard,我正在使用 (https://droptools.bendb.com/jooq/)。我正在使用自定义生成策略来为我的 setter 和 getter 维护驼峰式案例。名字按预期出现。

记录对象具有各自列的数据。但是,我不断从我的数据库中收到错误,我试图在非空列上设置“空”。

我仅在尝试创建新记录时看到此问题。更新记录工作正常。

ERROR [2021-03-18 14:58:05,363] com.bendb.dropwizard.jooq.jersey.LoggingDataAccessExceptionMapper: Error handling a request: 9f65c0316d996ebb
! org.postgresql.util.PSQLException: ERROR: null value in column "createdAt" of relation "failures" violates not-null constraint
!   Detail: Failing row contains (265, null, Some callback, User account not found, null, null, null).

如果我打印记录,它看起来像这样:

+------+------+--------------+--------------------------------------------------+------------------------------+------------------------------+------+
|    id|userId|action        |error                                             |createdAt                     |updatedAt                     |status|
+------+------+--------------+--------------------------------------------------+------------------------------+------------------------------+------+
|null|null|*Some callback|*User account not found|*2021-03-18 14:58:05,363|*2021-03-18 14:58:05,363|null|
+------+------+--------------+--------------------------------------------------+------------------------------+------------------------------+------+

我的吸气剂名称是: “getId”、“getUserId”、“getAction”、“getError”、“getCreatedAt”、“getUpdatedAt”、“getStatus”。

对于小写的列,我认为没有问题。列名在 CamelCase 中的地方的问题。

这个类看起来像:

public class FailureDao 

  private final DSLContext database;

  public FailureDao(DSLContext database) 
    this.database = database;
  

  public void storeFailure(FailureRecord failure) 
    database.newRecord(FAILURES, failure).store();
  

对于代码生成,我正在关注https://www.jooq.org/doc/3.13/manual/code-generation/codegen-generatorstrategy/这里的文档

我的生成器类看起来像:

public class AsInDatabaseStrategy extends DefaultGeneratorStrategy 

  @Override
  public String getJavaIdentifier(Definition definition) 
    return definition.getOutputName().toUpperCase();
  

  @Override
  public String getJavaSetterName(Definition definition, Mode mode) 
    return "set" + StringUtils.toUC(definition.getOutputName());
  

  @Override
  public String getJavaGetterName(Definition definition, Mode mode) 
    return "get" + StringUtils.toUC(definition.getOutputName());
  

【问题讨论】:

【参考方案1】:

我发现了问题。事实证明,这是在https://groups.google.com/g/jooq-user/c/1iy0EdWe_T8/m/YN9PEsIF4lcJ 上解释的。我的解决方法是使用 jOOQ 生成的 POJO。为了创建新记录,我现在传递的是 POJO 类的对象,而不是传递 Record 类的对象。

【讨论】:

以上是关于无法使用自定义生成器策略为 getter 名称创建记录的主要内容,如果未能解决你的问题,请参考以下文章

tensorflow:使用自定义生成器时您的输入用完了数据

Springboot 2.0.x Redis缓存Key生成器,自定义生成器

自定义生产者消费者

使用 Azure 策略为所有资源类型启用 Azure Defender

如何在自定义 Nx 生成器中生成 Angular 应用程序?

Zuul 默认 hystrix 隔离策略为 SEMAPHORE