У вас есть разные решения и ложные решения.
Использование триггера или любого трюка на уровне базы данных
Это создаст несоответствие между объектами в ORM и их сериализованной формой в БД. Если вы используете кеширование второго уровня: это может привести к множеству неприятностей. На мой взгляд, это не реальное решение для общего случая использования.
С использованием предварительной вставки, крюков перед обновлением
Вы будете молча изменять пользовательские данные непосредственно перед их сохранением. Таким образом, ваш код может вести себя по-разному в зависимости от того, что объект уже сохранен или нет. Это может вызвать проблемы тоже. Кроме того, вы должны быть осторожны с порядком вызова ловушек: убедитесь, что ваш "field-truncator-hook" - самый первый, вызываемый провайдером персистентности.
Использование aop для перехвата вызова сеттеров
Это решение будет более или менее тихо изменять пользовательский / автоматический ввод, но ваши объекты не будут изменены после того, как вы используете их для выполнения бизнес-логики. Так что это более приемлемо, чем два предыдущих решения, но сеттеры не будут следовать контракту обычных сеттеров. Кроме того, если вы используете инъекцию поля: это обойдет аспект (в зависимости от вашей конфигурации провайдер jpa может использовать инъекцию поля. Большую часть времени: Spring использует сеттеры. Я думаю, что некоторые другие платформы могут использовать инъекцию поля, так что даже если вы не используете не используйте его явно, чтобы быть в курсе базовой реализации используемых вами фреймворков).
Использование aop для перехвата модификации поля
Аналогично предыдущему решению, за исключением того, что ввод поля также будет перехвачен аспектом. (обратите внимание, что я никогда не писал аспект, делающий подобные вещи, но я думаю, что это возможно)
Добавление уровня контроллера для проверки длины поля перед вызовом установщика
Вероятно, лучшее решение с точки зрения целостности данных. Но это может потребовать много рефакторинга. Для общего случая использования это (на мой взгляд) единственно приемлемое решение.
В зависимости от вашего варианта использования вы можете выбрать любое из этих решений. Помните о недостатках.