Использование проверки бина в спящем режиме - PullRequest
0 голосов
/ 31 января 2019

Мне было интересно, можно ли использовать Java Bean Validation в hibernate и как они интегрируются друг с другом.

У меня есть стек, состоящий из Jax-rs API и JPA в моих данныхслой.

Мне было интересно, можно ли использовать валидацию Java Bean для проверки моих Hibernate-сущностей без использования Spring.

Могу ли я использовать аннотации из hibernate вместе с аннотациями из javax.validation.contraints вместе?

например:

@Column(nullable = false)
@Size(min =8, max = 12)
@NotNull(message = "Phone Number must be entered")
private String phoneNumber;

здесь я указываю, что я столбец, не может быть нулевым из-за гибернации и проверки бина.

Это хорошая практика?

Или существует ли альтернатива проверке данных в спящем режиме без проверки бина, подобной этой?

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Спецификация Bean Validation интегрируется с Hibernate и всеми другими реализациями спецификации JPA 2.x.Я объяснил это очень подробно в моей статье Как автоматически проверять сущности с помощью Hibernate Validator .

Позвольте мне дать краткую сводку:

Если вы добавите реализацию спецификации проверки компонентов, например, Hibernate Validator, в свой проект, Hibernate автоматически инициирует проверку перед вставкой и обновлением объекта,Вы можете настроить это, а также запустить проверку перед удалением объекта.Я объяснил это более подробно в моей статье.

Вы можете использовать все функции спецификации Bean Validation, включая настраиваемые правила проверки, для проверки ваших атрибутов сущности.Я использовал это здесь , чтобы проверить, что значение атрибута сущности находится в пределах определенного диапазона, и здесь , чтобы проверить, что установлена ​​только одна из 2 ассоциаций.

Пример отображения, который вы разместили в своем вопросе, является очень хорошей практикой!Часть @Column(nullable = false) не является строго необходимой, поскольку правило проверки уже гарантирует, что атрибут не может быть нулевым.

0 голосов
/ 31 января 2019

Поскольку Hibernate также имеет свои собственные аннотации проверки, например, @ NotBlank , я не думаю, что использовать javax.validation.constraint здесь будет плохой практикой.Насколько я знаю, Hibernate даже пытается рассмотреть все эти аннотации.

Так, например, поле, помеченное @NotNull, не будет обнуляться в сгенерированной таблице (поэтому добавление nullable = false является избыточным), поле String, помеченное @Size(max=2047), будет varchar(2047)в MySQL вместо значения по умолчанию varchar(255).

Это может быть полезно прочитать: http://hibernate.org/validator/

Полный справочный документ по проекту: https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#preface

РЕДАКТИРОВАТЬ: На основе ThorbenОтвет Янссена, оставшаяся часть моего первоначального ответа ниже этого может быть отклонена:)

Я не уверен, что некоторые более сложные ограничения (например, регулярное выражение для телефонных номеров) автоматически применяются к даннымслой или нет.Например, если у вас есть @Pattern для вашего поля phoneNumber, оно будет работать, когда ваш ввод десериализован в ваш объект.Но если ваши методы установки не имеют тех же ограничений проверки, у вас может быть объект в памяти из некоторого источника с неправильно отформатированным phoneNumber, который может быть сохранен в базе данных.Наиболее безопасный способ использования этих ограничений, вероятно, включал бы использование программной проверки с Validator.validate () перед сохранением и обновлением базы данных.

...