2016-06-14 8 views
1

これはJooqクエリと私のmethoodです: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   | 

だから私のクエリは、いくつかの結果を返すです。だから問題はクエリではなく、メソッドにあると思う。

デフォルトコンストラクタが利用可能ではありませんが、少なくとも1つの「マッチング」コンストラクタが利用可能であり、そのいずれかが使用されている場合、これはJOOQドキュメント http://www.jooq.org/javadoc/3.5.x/org/jooq/impl/DefaultRecordMapper.html

から

public class UserEmailOrganisation { 


    public String emailId; 

    public String name; 

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

} 

私UserEmailOrganisationクラスです。 「呼び出すときClass.getDeclaredConstructors() によって報告されたように、いくつかのコンストラクタが見出される「マッチ」する場合、このレコードはフィールド を保持するよう

A「一致」コンストラクタは正確に同じ数の引数を有するものである、最初のものは、(選択されマッチング」コンストラクタは、値はコンストラクタ引数の型に変換されます。

だから私のコードが正しく動作する必要がありますか?それが一致するコンストラクタを持っている。しかし、それは。私は次の例外を取得しません。

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) 

答えて

3

問題は、テーブル値を保持するために内部クラスを使用していたことでした。

問題に応じて可能ではない -
https://github.com/jOOQ/jOOQ/issues/1821

クラスUserEmailOrganisation外を移動するには、問題を解決しました。

0

それはヌルの結果を戻していますか?このクエリのSQLテキストをダンプしてから、I_USERSテーブルに対して実行して結果が得られるかどうかを確認できますか?ヌル結果を処理するために別のコンストラクターを追加する必要があります。

​​
+0

私はあなたの質問に答えるために私の質問を編集しました。 –

関連する問題