Java JOOQ—如何使用字段列表将数据提取到pojo中

Java JOOQ—如何使用字段列表将数据提取到pojo中,java,jooq,Java,Jooq,我有一个DDBB,有三个表:loan、person和loan_person_rel,以及每个表各自的POJO 贷款 如何构建JOOQ select或某种方法来检索数据,并用填充的字段人员填充课堂贷款?必须这样: List<Loan*> list = dsl.selectFrom(Loan).fetch(this::recordToPojo); private Loan recordToPojo(final LoanRecord record) { return new Lo

我有一个DDBB,有三个表:loan、person和loan_person_rel,以及每个表各自的POJO

贷款

如何构建JOOQ select或某种方法来检索数据,并用填充的字段人员填充课堂贷款?

必须这样:

List<Loan*> list = dsl.selectFrom(Loan).fetch(this::recordToPojo);

private Loan recordToPojo(final LoanRecord record) {
    return new Loan(
            record.getLine(),
            record.getBalance(),
            ....
    );
}

*贷款-pojo的名称

从jOOQ 3.14开始,这里的首选方法是。您可以编写如下查询:

列表结果= ctx.select //投影所需的贷款列,或使用loan.asterisk投影所有贷款列 LOAN.LINE, 贷款余额, ... 字段选择 JSONARRAYAGJSONObject keyname.valuePERSON.NAME, keydocumentNumber.valuePERSON.DOCUMENT\U编号, ... .fromPERSON .joinLOAN\u PERSON\u REL .onPERSON.PERSON\u ID.eqLOAN.PERSON\u REL.PERSON\u ID .whereLOAN\u PERSON\u REL.LOAN\u ID.eqLOAN.LOAN\u ID 阿斯珀森先生 .贷款 .fetchIntoLoan.class; 与基于JPA的ORMs不同,jOOQ不提供对象图持久性,即Person对象不能包含对Loan对象的基于身份的引用。相反,这种方法以树的形式投影数据,这对于您的用例来说可能很好


请注意,JSON_ArrayAg将空集聚合为NULL,而不是空[]

您在这里提出的问题看起来需要一个全面的ORM解决方案,而不是JOOQ。JOOQ是相对简单的SQL映射器/生成器库,而不是模型图查询工具。或者至少这一直是我的印象。如果出于某种原因,您真的不能使用基于JPA的实体图持久性框架,那么您可以使用jOOQ之类的工具来实现这一点。但通常情况下,接受SQL并使用JPA人员所称的投影(即纯SQL)要简单得多,不必担心嵌套集合太多。
private String name;
private String documentNumber;
private String workEnterprise;
private String workCity;
private String workAddress;
private String workNeighborhood;
private String workPhone;
private String occupation;
private String homePhone;
private String cellPhone;
private String phone3;
private String phone4;
private String homeAddress;
private String homeCity;
private String homeNeighborhood;
private String email;
private String relationship;
private List<Loan> loans;
//The class contains the getters and setters :)
private String personId;
private String loanId;
private int type;
//The class contains the getters and setters :)
List<Loan*> list = dsl.selectFrom(Loan).fetch(this::recordToPojo);

private Loan recordToPojo(final LoanRecord record) {
    return new Loan(
            record.getLine(),
            record.getBalance(),
            ....
    );
}