KamoCRM

Persist RoleRightType by stable getId()

Fixkamo-shared-library
Порезанный
20 апреля 2026 г. в 20:59 UTC
Автор
Kamo
Обещать
ea4a85b

Hibernate @Enumerated (EnumType.ORDINAL) пишет/читает индекс декларации Энум. При удалении значения RoleRightType (например, MANAGE USERS, id=19) Каждый последующий вход смещается на один, в то время как getId() остается на месте - Создание молчаливого расхождения. В этой кодовой базе сырой SQL upsert **************** всегда пишет getId(), поэтому после MANAGE USERS была удалена + добавлены новые права, DB теперь имеет значения right type (например, 136), которые превышают значения (длины) RoleRightType, в результате чего Hibernate Бросьте ArrayIndexOutOfBoundsException на чтение и аварийный запуск. Представляем RoleRightTypeIdConverter **************************** Целое число> Путешествие через GetId(). Применяется ко всем пяти таблицам с правильной картой: OrgRoleRight - Член право JobTitleRight - Отдел права Применяемые права Неизвестные идентификаторы преобразуются обратно в нуль, поэтому **************** Они могут убираться на следующем ботинке, а не ломаться. Данные колонки уже соответствует getId() (это то, что вставляет IfAbsent), поэтому никакой миграции Это необходимо — конвертер выравнивает Hibernate с тем, что фактически хранится.

Все изменения

Как вы видите судоходство?

Все это приходит в ваше рабочее пространство самостоятельно. Начните с бесплатного плана и прочитайте эту страницу через месяц.

Начните бесплатно навсегдаПосмотреть цены