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

Java 实例化新记录时应用默认值,java,jooq,Java,Jooq,我看到jOOQ也在向其元数据添加默认值: public class Kampagne extends TableImpl<KampagneRecord> { this.AKTIV = createField("AKTIV", SQLDataType.VARCHAR(1).nullable(false) .defaultValue(DSL.field("'J' ", SQLDataType.VARCHAR)),

我看到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());

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

这目前未实现。有多种可能的
DEFAULT
表达式需要计算,可能是由数据库计算,以获得正确的值。一个简单的例子是
CURRENT\u TIMESTAMP
,它应该对应:

  • 到服务器(数据库)时间,而不是客户端时间
  • 记录实际创建的时间,而不是客户机创建客户机记录模型之前的某个时刻
  • 在您的特定情况下,它显然会起作用,因为它是一个常量,没有任何上下文歧义。(如果您使用POJO,则使用POJO)。然后,该自定义代码部分将包含一个实例初始化器,该初始化器将与每个构造函数调用一起运行:

    {
    set(KAMPAGNE.AKTIV,true);
    //其他默认初始化
    }
    
    我明白了。我将继续阅读有关代码生成器的内容。谢谢@西蒙马蒂内利:我很想看到这一点。如果它对你有用,你可以把它发布在Github或你的博客上?@SimonMartinelli:我刚刚想到另一件事。所有
    默认
    表达式都是表达式。也许我们可以提供一个功能,让您可以轻松运行包含这些表达式的
    SELECT
    语句,生成记录,而不是自己创建记录。这需要额外的服务器往返,但会更加健壮。如果我能为我的问题找到解决方案,我一定会写下来。是的,如果我们得到一个填充的记录,服务器往返不会是一个问题。实际上,我们可以检测到是否需要服务器往返。如果所有默认值都是常量,那么我们可以避免它,这将使它成为一个非常好的特性。我已为此创建了一个功能请求:
    KampagneRecord record = new KampagneRecord();
    
    assertTrue(record.getAktiv();