Java 为什么我不能使用Jooq的into方法获取类中的数据库字段值?

Java 为什么我不能使用Jooq的into方法获取类中的数据库字段值?,java,javabeans,jooq,Java,Javabeans,Jooq,这是我处理Jooq查询的方法: private List<UserEmailOrganisation> getEmailsAndOrgNames() { Result<Record2<String, String>> r = dsl .fetch(dsl .select(I_USERS.EMAIL_ID, I_ORGANISATIONS.NAME) .from(I_USERS)

这是我处理Jooq查询的方法:

private List<UserEmailOrganisation> getEmailsAndOrgNames() {

    Result<Record2<String, String>> r = dsl
    .fetch(dsl
            .select(I_USERS.EMAIL_ID, I_ORGANISATIONS.NAME)
            .from(I_USERS)
            .leftOuterJoin(I_ORGANISATIONS)
            .on(I_USERS.ORGANISATION_ID.equal(I_ORGANISATIONS.ID))
            .where(DSL.timestampAdd(I_USERS.UPDATED, MINIMUM_INACTIVE_DATE,
                    DatePart.DAY).lessOrEqual(DSL.currentTimestamp())));

    logger.debug(r.toString());



    return r.into(UserEmailOrganisation.class);
}
所以我的查询返回了一些结果。因此,我认为问题不在于查询,而在于into方法

这是我的班级

public class UserEmailOrganisation {


    public String emailId;

    public String name;

    public UserEmailOrganisation(String emailId, String name) { 
        this.emailId = emailId; 
        this.name = name; 
    }

}
来自JOOQ文档

如果没有可用的默认构造函数,但至少有一个匹配的构造函数可用,则使用该构造函数

匹配构造函数的参数数量与此记录所包含的字段数量完全相同 当找到多个匹配的构造函数时,将按照Class.getDeclaredConstructors的报告选择第一个 调用匹配构造函数时,值将转换为构造函数参数类型

所以我的代码应该正常工作?因为它有一个匹配的构造函数。但事实并非如此。我得到以下例外

org.jooq.exception.MappingException: No matching constructor found on type class com.kubera.insights.admin.jobs.BackOfficeUsersReminderJob$UserEmailOrganisation for record org.jooq.impl.DefaultRecordMapper@2ccd7880
at org.jooq.impl.DefaultRecordMapper.init(DefaultRecordMapper.java:321)
at org.jooq.impl.DefaultRecordMapper.<init>(DefaultRecordMapper.java:257)
at org.jooq.impl.DefaultRecordMapper.<init>(DefaultRecordMapper.java:244)
at org.jooq.impl.DefaultRecordMapperProvider.provide(DefaultRecordMapperProvider.java:81)
at org.jooq.impl.ResultImpl.into(ResultImpl.java:1499)

它是否返回空结果?是否可以转储此查询的SQL文本,然后对I_USERS表运行它以查看是否得到结果?您可能需要添加另一个构造函数来处理空结果

public class UserEmailOrganisation {

    public String emailId;

    public String name;

    public UserEmailOrganisation(String emailId, String name) { 
        this.emailId = emailId; 
        this.name = name; 
    }

    public UserEmailOrganisation(Object response) {
        if (response == null) {
            // what happens if it's empty?
        }
    }
}

它是否返回空结果?是否可以转储此查询的SQL文本,然后对I_USERS表运行它以查看是否得到结果?您可能需要添加另一个构造函数来处理空结果

public class UserEmailOrganisation {

    public String emailId;

    public String name;

    public UserEmailOrganisation(String emailId, String name) { 
        this.emailId = emailId; 
        this.name = name; 
    }

    public UserEmailOrganisation(Object response) {
        if (response == null) {
            // what happens if it's empty?
        }
    }
}

问题是我使用了一个内部类来保存表值

根据这个问题,这是不可能的-


将类移到外部解决了这个问题。

问题是我使用了一个内部类来保存表值

根据这个问题,这是不可能的-

将类移到外部解决了这个问题