Hibernate: как бороться с PropertyAccessException (неверные данные)? - PullRequest
0 голосов
/ 09 ноября 2018

Предположим, у меня есть объект с полем типа FOO, но внешний процесс записывает недопустимое значение BAR в базу данных. Поэтому в следующий раз, когда я попытаюсь прочитать эту сущность в Hibernate, я получу следующее исключение:

org.hibernate.PropertyAccessException: Не удалось установить значение поля [BAR] значением отражения

К сожалению, я также получаю это исключение, когда я вызываю метод getAllFoo (), и база данных содержит 999 действительных объектов плюс один недействительный объект. Я хотел бы иметь возможность получить 999 действительных сущностей плюс какое-то предупреждение для недействительных.

Возможно ли это даже в Hibernate?

1 Ответ

0 голосов
/ 09 ноября 2018

Я могу придумать 3 варианта:

(1): добавьте предложение WHERE field IN(<list of valid values>) ко всем запросам к этой таблице + поле.

(2): Очистите базу данных и добавьте ограничение в поле, чтобы в нем не могло быть недопустимых значений.

(3): Добавьте недопустимую опцию (я предполагаю, что это enum?) К вашей сущности и отфильтруйте ее в собственном коде. Это может нарушить правильное разбиение на страницы запросов. Это также быстро запутается, если у вас будет большое количество недопустимых значений.

Редактировать

(4): создание пользовательского типа гибернации (UserType). Там вы можете разобрать значение вручную из подготовленной выписки / набора результатов. Это позволяет (вместо создания исключения) отображать «недопустимые» значения в null или любое другое значимое значение, которое вы можете обработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...