这是我对Jooq查询的不满:
SplashScreen
logger.debug方法打印 -
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方法。
这是我的UserEmailOrganisation类
|email_id |name |
+-----------------------------------+----------------+
|email1@some.com |org1 |
|email2@some.com |org2 |
来自JOOQ文档 http://www.jooq.org/javadoc/3.5.x/org/jooq/impl/DefaultRecordMapper.html
如果没有默认构造函数可用,但至少有一个&#34;匹配&#34;构造函数是可用的,使用的是。
A&#34;匹配&#34;构造函数是具有与此记录保存字段完全相同的参数的构造函数 当几个&#34;匹配&#34;找到构造函数,选择第一个(由Class.getDeclaredConstructors()报告 当调用&#34;匹配&#34;构造函数,值被转换为构造函数参数类型。
所以我的代码应该正常工作?因为它有一个匹配的构造函数。但它并没有。我得到以下异常。
public class UserEmailOrganisation {
public String emailId;
public String name;
public UserEmailOrganisation(String emailId, String name) {
this.emailId = emailId;
this.name = name;
}
}
答案 0 :(得分:5)
问题是我使用内部类来保存表值。
根据问题,这是不可能的 -
https://github.com/jOOQ/jOOQ/issues/1821
将课程 UserEmailOrganisation 移到外面解决了这个问题。
答案 1 :(得分:1)
是否返回null结果?您可以转储此查询的SQL文本,然后针对I_USERS表运行它以查看是否得到结果?您可能需要添加另一个构造函数来处理null结果。
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?
}
}
}