Java 为什么我不能使用Jooq的into方法获取类中的数据库字段值?
这是我处理Jooq查询的方法: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)
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?
}
}
}
问题是我使用了一个内部类来保存表值 根据这个问题,这是不可能的-
将类移到外部解决了这个问题。问题是我使用了一个内部类来保存表值 根据这个问题,这是不可能的- 将类移到外部解决了这个问题