Добрый вечер,
Я пытаюсь обновить атрибут объединенной таблицы для существующих записей. У меня две модели, одна называется Records, другая - Shoppingcarts. Они связаны таблицей соединений под названием records_shoppingcarts. Я добавил атрибут отношения к таблице соединения под названием record_amount, который должен содержать количество каждой записи в таблице соединения.
В настоящий момент всякий раз, когда товар добавляется в корзину, добавляется только один товар. Затем пользователь может изменить количество товаров в тележке для покупок в окне оформления заказа. Я обрабатываю это, запрашивая в таблице соединений records_shoppingcarts записи с соответствующим record_id и обновляя столбец record_amount до нового количества записей в корзине. Это выглядит примерно так:
List<RecordsShoppingcarts> associations = RecordsShoppingcarts.where("shoppingcart_id = ?", s.get("id"));
//update the number of records in the join table
for(RecordsShoppingcarts rs : associations) {
if ((int)rs.getInteger("record_id") == (int)rec.getInteger("id")) {
rs.delete(); //cleanup
rs.set("record_amount", amount);
rs.saveIt();
}
}
}
К сожалению, всякий раз, когда вызывается saveIt(); запись не обновляется в базе данных, но создается новая запись с теми же shoppingcart_id, recordId и обновленным количеством. Мне, наверное, здесь чего-то не хватает, так как я не могу представить, как предполагается обновление таблиц соединений вручную. К сожалению, я не смог найти ничего об обновлении атрибутов отношений в таблицах соединений. Это вообще предусмотрено ActiveJdbc?
Любая помощь приветствуется. С наилучшими пожеланиями, derelektrischemoench




Фреймворк работает точно так, как ожидалось. Вам необходимо ознакомиться с тем, как он решает создать новую запись или обновить существующую, прочитав эту страницу: http://javalite.io/surrogate_primary_keys
Обычно вы удаляете запись:
rs.delete();
Итак, в следующий раз вы сделаете:
rs.saveIt();
он создает новую запись. Просто удалите rs.delete();, и все будет в порядке.
Привет иполевой, виноватых нашел. Я недостаточно внимательно прочитал руководство, в моей базе данных была ошибка. Я забыл объявить столбец id в общей таблице. Исправлено, обновление работает. Это имеет смысл, потому что как еще фреймворк должен найти правильную запись в таблице m: n. Спасибо за терпение, чтобы справиться с моим невежеством :). Думаю, я должен тебе пива. Продолжайте в том же духе, с наилучшими пожеланиями.