注意:此代码曾用于我使用PostgreSQL。切换到MySQL后,这些功能由于某种原因停止工作。
我仔细检查过:languageId
和shopId
是有效的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)
);