Note: This code used to work as I used PostgreSQL. After switching to MySQL these functions stopped working for some reason.
I double checked: languageId
and shopId
are valid IDs and there is a valid entry of supported_language
resembling the inserted record after fetchOne()
but it returns 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;
}
I also tried using
.returning(RESTAURANT_LANGUAGE.LANGUAGE_ID)
but the result is the same.
I am observing something similar when calling returnin()
after a delete()
statement:
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.");
}
}
I don't understand why this is happening. The new record gets correctly inserted but still I cannot fetch that record immediately after insertion.
I created SHOP_LANGUAGE
and all other objects using the jOOQ code generator. This is the SQL CREATE TABLE
statement that I used to create the table for a MySQL database:
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)
);