为什么我无法使用Jooq方法在类中获取数据库字段值?

时间:2016-06-14 13:59:32

标签: java javabeans jooq

这是我对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; 
    }

}

2 个答案:

答案 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?
        }
    }
}