這是我methood與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)
.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);
}
logger.debug方法打印 -
|email_id |name |
+-----------------------------------+----------------+
|[email protected] |org1 |
|[email protected] |org2 |
所以我的查詢是返回了一定的成效。所以我認爲問題不在於查詢,而在於方法。
這是我UserEmailOrganisation類
public class UserEmailOrganisation {
public String emailId;
public String name;
public UserEmailOrganisation(String emailId, String name) {
this.emailId = emailId;
this.name = name;
}
}
從JOOQ文檔 http://www.jooq.org/javadoc/3.5.x/org/jooq/impl/DefaultRecordMapper.html
如果沒有默認構造函數是可用的,但至少有一個「匹配」的構造函數是可用的,一個用來。
A「匹配」構造是一個與完全一樣多參數作爲此記錄保存字段 當幾個「匹配」的構造被發現,第一個被選擇(通過Class.getDeclaredConstructors() 報道當調用「匹配」的構造函數,值轉換到構造函數參數類型。
所以我的代碼應該工作的權利?因爲它有一個匹配的構造,但事實並非如此。我得到下面的異常。
org.jooq.exception.MappingException: No matching constructor found on type class com.kubera.insights.admin.jobs.BackOfficeUsersReminderJob$UserEmailOrganisation for record [email protected]
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)
我編輯了我的問題來回答你的問題。 –