Да, действительно, WebObjects сам кеширует данные, поэтому включение кеша запросов в СУБД не дает прироста эффективности (который был бы заметен при использовании с РНР).
Потому же не рекомендуется вносить изменения в БД при запущенном WO-приложении, опирающемся на нее.
При сохранении данных, WebObjects проверяет в сохраняемой записи соответствие данных в кеше с тем, что реально есть в БД. Если данные различаются, он кидает ошибку.
Также и измененная в БД информация не появится в приложении до тех пор, пока не обновится кеш. (либо по времени, либо специальным запросом). При этом, новые записи обычно находятся - кешируется только информация по уже извлеченным записям, а поиски выполняются все же в БД.
Приведенная ошибка связана скорее всего с тем, что WebObjects не ориентируется на встроенные в БД средства генерации индексов, а ведет свою таблицу индексов EO_PK_TABLE, в которой хранит, какой следующий индекс для какой таблицы будет использован.
Видимо, Вы ввели запись другими средствами, а когда WebObjects хотел сохранить новую запись, то попытался использовать уже занятый индекс.