实例化新记录时应用默认值

问题描述 投票:0回答:1

我看到 jOOQ 也在其元数据中添加了默认值:

public class Kampagne extends TableImpl<KampagneRecord> {

  this.AKTIV = createField("AKTIV", 
               SQLDataType.VARCHAR(1).nullable(false)
                 .defaultValue(DSL.field("'J' ", SQLDataType.VARCHAR)), 
               this, 
               "die Kampagne ist aktiv, d.h. noch nicht abgeschlossen (markiert) resp. ist abgeschlossen (nicht markiert)", 
               new Varchar2ToBooleanConverter());

有没有办法在创建新记录时添加这些默认值?

这样测试就会成功吗?

KampagneRecord record = new KampagneRecord();

assertTrue(record.getAktiv();

您可能会问为什么我需要这个?我在 UI 中使用记录,并希望复选框已根据绑定到模型的记录设置为默认值。

java jooq
1个回答
2
投票

目前尚未实施。为了获得正确的值,需要对多种可能的

DEFAULT
表达式进行评估(可能由数据库进行评估)。一个简单的情况是
CURRENT_TIMESTAMP
,它应该对应:

  1. 到服务器(数据库)时间,而不是客户端时间
  2. 实际创建记录的时间,而不是客户创建客户记录模型之前的某个时刻。

在您的特定情况下,它显然会起作用,因为它是一个常数,没有任何上下文歧义。 您可以扩展代码生成器并在记录中生成一些自定义代码部分(以及 POJO,如果您使用它们)。然后,该自定义代码部分将包含一个实例初始化程序,它将在每次构造函数调用时运行:

{
    set(KAMPAGNE.AKTIV, true);
    // Other default initialisations
}

或者,您可以使用解析器对

DataType.default_()
值进行逆向工程,并从
Param
中提取常量值(如果它是
Param
,或与
Param
兼容的内容,例如
CAST(1 AS INT)
) )

© www.soinside.com 2019 - 2024. All rights reserved.