これは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)
私はあなたの質問に答えるために私の質問を編集しました。 –