ActiveJdbc обновить атрибут объединенной таблицы

Добрый вечер, Я пытаюсь обновить атрибут объединенной таблицы для существующих записей. У меня две модели, одна называется 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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
111
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Фреймворк работает точно так, как ожидалось. Вам необходимо ознакомиться с тем, как он решает создать новую запись или обновить существующую, прочитав эту страницу: http://javalite.io/surrogate_primary_keys

Обычно вы удаляете запись:

 rs.delete();

Итак, в следующий раз вы сделаете:

rs.saveIt();   

он создает новую запись. Просто удалите rs.delete();, и все будет в порядке.

Привет иполевой, виноватых нашел. Я недостаточно внимательно прочитал руководство, в моей базе данных была ошибка. Я забыл объявить столбец id в общей таблице. Исправлено, обновление работает. Это имеет смысл, потому что как еще фреймворк должен найти правильную запись в таблице m: n. Спасибо за терпение, чтобы справиться с моим невежеством :). Думаю, я должен тебе пива. Продолжайте в том же духе, с наилучшими пожеланиями.

derelektrischemoench 07.04.2018 09:21

Другие вопросы по теме