使用returns()时的java.lang.NullPointerException .fetchOne()

时间:2016-06-01 17:57:39

标签: jooq

注意:此代码曾用于我使用PostgreSQL。切换到MySQL后,这些功能由于某种原因停止工作。

我仔细检查过:languageIdshopId是有效的ID,supported_language之后有fetchOne()的有效条目类似于插入的记录,但它返回null }。

private Long addSupportedLanguage(Long languageId, Long shopId) {

    Long value = this.ctx.insertInto(SHOP_LANGUAGE)
        .set(SHOP_LANGUAGE.LANGUAGE_ID, languageId)
        .set(SHOP_LANGUAGE.SHOP_ID, shopId)
        .returning()
        .fetchOne() // After this line I see the record in my db but it returns null
        .getValue(SHOP_LANGUAGE.LANGUAGE_ID);

    return value;
}

我也尝试过使用

.returning(RESTAURANT_LANGUAGE.LANGUAGE_ID)

但结果是一样的。

returnin()声明之后调用delete()时,我正在观察类似内容:

public void deleteEmailVerificationToken(String token) {

    ShopAdminVerificationTokenRecord shopAdminVerificationTokenRecord = this
            .ctx.delete(SHOP_ADMIN_VERIFICATION_TOKEN)
            .where(SHOP_ADMIN_VERIFICATION_TOKEN.VERIFICATION_TOKEN.eq(token))
            .returning()
            .fetchOne()
            .into(SHOP_ADMIN_VERIFICATION_TOKEN);

    if(shopAdminVerificationTokenRecord != null) {
        LOGGER.debug("Deleted verification token for " + shopAdminVerificationTokenRecord.getUserEmail());
    } else {
        LOGGER.debug("The given token was not found.");
    }
}

我不明白为什么会这样。新记录被正确插入但仍然无法在插入后立即获取该记录。

我使用jOOQ代码生成器创建了SHOP_LANGUAGE和所有其他对象。这是我用来为MySQL数据库创建表的SQL CREATE TABLE语句:

CREATE TABLE shop_language (

    shop_id BIGINT NOT NULL,

    CONSTRAINT fk__shop_language__shop
        FOREIGN KEY (shop_id)
        REFERENCES shop(id),

    language_id BIGINT NOT NULL,

    CONSTRAINT fk__shop_language__language
        FOREIGN KEY (language_id)
        REFERENCES language(id),

    PRIMARY KEY (shop_id, language_id)          
);

0 个答案:

没有答案