У вас скорее всего ошибка в логике приведенного кода. Такое чувство, что вы хотите создать 2 строки в БД, но приведенный код сделает одну, а затем изменит ее. Вы б лучше написали что вы хотите сделать.
Так же следует учесть: save вызывается в любом случае, но не всегда он будет сохранять. Например, если не прошла валидация, он не будет пытаться сохранить невалидную модель в базу.
Вполне возможно что у вас есть уникальный валидатор по cat_id и строка с таким id уже существует - save не удет сохранять а просто вернет false.
Если делаешь что-то критичное, результат save всегда нужно проверять! И либо бросать эксепшн, либо как-то это обрабатывать.