Java jooq-向生成的记录类添加代码

Java jooq-向生成的记录类添加代码,java,jooq,Java,Jooq,我正在学习如何与jooq合作。我想知道是否可以在生成的记录类中添加一些域级方法 假设记录是这样的: public class ConCalCompanyRecord extends org.jooq.impl.UpdatableRecordImpl<com.aesthete.csmart.connect.model.db.gen.tables.records.ConCalCompanyRecord> implements org.jooq.Record6<java.lang.I

我正在学习如何与jooq合作。我想知道是否可以在生成的记录类中添加一些域级方法

假设记录是这样的:

public class ConCalCompanyRecord extends org.jooq.impl.UpdatableRecordImpl<com.aesthete.csmart.connect.model.db.gen.tables.records.ConCalCompanyRecord> implements org.jooq.Record6<java.lang.Integer, java.lang.Integer, java.lang.String, java.lang.String, java.sql.Timestamp, java.sql.Timestamp> {

// properties
// getters and setters

// I would like to add a method like this:
   public void isABlueCompany(){
     // work with the fields
   }

}
公共类ConCalCompanyRecord扩展org.jooq.impl.updateablerecordimpl实现org.jooq.Record6{
//性质
//接球手和接球手
//我想添加如下方法:
上市公司(){
//与田地一起工作
}
}
但是我知道如果我这样做,一旦我从DB中再次生成这个类,我所有的更改都将丢失。那么,推荐的方法是什么呢

包装类?记录的一个子类?如果是其中任何一个,我如何让jooq在获取时识别这些类。例如:

connectionFacade.getDSLContext()
            .selectFrom(CON_CAL_INSTANCE)
            .where(CON_CAL_INSTANCE.DATE.between(
                    new Date(datesOfTheWeekForDate[0].toDate().getTime()), new Date(datesOfTheWeekForDate[1].toDate().getTime())))
            .orderBy(CON_CAL_INSTANCE.DATE)
            .fetch()
            .into(new RecordHandler<ConCalInstanceRecord>() {
                @Override
                public void next(ConCalInstanceRecord record) {
                    calendarEntries.addToList(new com.aesthete.csmart.connect.model.domain.records.ConCalInstance(record));
                   }
            });
connectionFacade.getDSLContext()
.selectFrom(CON\u CAL\u实例)
.where(CON_CAL_INSTANCE.DATE.between(
新日期(datesOfTheWeekForDate[0].toDate().getTime()),新日期(datesOfTheWeekForDate[1].toDate().getTime())
.orderBy(CON_CAL_INSTANCE.DATE)
.fetch()
.into(新的RecordHandler(){
@凌驾
下一次公开作废(ConcalistanCerrock记录){
calendarEntries.addToList(新的com.aesthete.csmart.connect.model.domain.records.ConCalInstance(记录));
}
});
在上面的例子中,我向record类提供了一个名为ConCalInstance的包装器。如果需要使用包装器,是否必须为执行的每个查询编写这样的记录处理程序?
推荐的方法是什么?

您可以使用自己的扩展覆盖jOOQ的默认代码生成器。本手册中记录了这一点:

该示例显示了它的工作原理:

public class MyGenerator extends JavaGenerator {

    @Override
    protected void generateRecordClassFooter(
        TableDefinition table, 
        JavaWriter out
    ) {
        super.generateRecordClassFooter(table, out);

        if ("SOME_TABLE".equals(table.getName())) {
            out.println();
            out.tab(1).println("public void isABlueCompany() {");
            out.tab(2).println("// Your logic here");
            out.tab(1).println("}");
        }
        else if ("SOME_OTHER_TABLE".equals(table.getName())) {
            // [...]
        }
    }
}

根据Lukas的建议,我在生成的记录中添加了如下代码

public class ConCalInstanceRecord extends org.jooq.impl.UpdatableRecordImpl....{

     //fields and getter and setters of the generated record..

    private ConCalInstanceBehaviour behaviour;

    public ConCalInstanceBehaviour getBehaviour(){
        if(behaviour==null){
            behaviour=new ConCalInstanceBehaviour(this);
        }
        return behaviour;
    }
}
有点像我所说的包装器,但反过来说,记录包装了一个行为类。现在,我可以将自定义行为添加到行为类中,而无需每次需要添加新方法时都返回生成器

这允许我访问其他域行为,如

record.getBehaviour().doSomething();

嘿,卢卡斯。。谢谢你的回复。对不起,我应该说得更清楚些。这不是我要添加到模板中的内容。这些是域方法。让我举个例子,CreditCardRecord可以有一个类似于public boolean isAValidCard()的方法。在这种方法中,我们将检查卡是否有效。UserRecord可以有不同的方法。这些不是添加到模板中的内容,而是在需要时将其编码到对象中。我可以使用fetchInto POJO方法,而不使用生成的记录。。我想这是一种方法。如何处理这样的情况,即您希望向返回的记录添加更多功能。我的解决方案仍然适用于您。让我再加一句话来澄清。。。事实上,由于您提到的原因,您无法手动将代码添加到生成的记录中。我最终添加的代码与更新的问题中提到的一样。。请看一看。。不管是谁interested@sethu:您实际上可以添加包含该更新的自己的答案,而不是修改问题。对于这个问题的未来访问者来说,了解您的解决方案是如何产生的将更加困难。。。