2016-06-14 41 views
1

這是我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) 

回答

0

它是否返回空結果?您可以轉儲此查詢的SQL文本,然後針對I_USERS表運行它以查看您是否得到結果?您可能需要添加另一個構造函數來處理空結果。

​​
+0

我編輯了我的問題來回答你的問題。 –

相關問題