Эквивалент @Size(max = 80) в XML-файле hbm для проверки bean-компонента
Мне нужно знать эквивалент аннотации @size, используемой в классах модели hibernate, который мы можем использовать в файле hbm.xml.
Немного предыстории: Итак, я столкнулся с этой проблемой, когда размер столбца в базе данных указан как 255, и я ограничил количество символов в соответствующем поле ввода до 255, используя атрибут maxLength HTML-тега textArea. Пользователь не может ввести более 255 символов. Но когда вы вводите определенный текст на пустом месте в текстовое поле, которое содержит только 255 символов, код прерывается во время его сохранения. Логи говорят, что мы пытаемся ввести 256 символов! Введенный пример текста:
lkjsajf, asdmcladskfhncv, sd.mcvjhsdlk; J;lsdnc;;sadkjlfhsdnvcjsdhfvdsnkcjlsdjlfcujdslknfjkds;hgdsjnfajijujjfkvlfdsvil;djsvmjds;ocujas;mcklsdavhodsalvnlsdka;hvdslnvc;lsidhvydsknvlioadsiugvpodsjv;sdaou'gvdpsovjl; fjdls llhavfaskgjvlkds'jvc'dsajouopds;; CS JVCL;
Чтобы исправить это, я добавил аннотацию @size в соответствующий столбец модели, которая используется для проверки bean-компонента hibernate и предотвращает появление исключения на странице, а вместо этого показывает сообщение проверки. В моем проекте есть смесь файлов отображения hbm и только классы моделей с аннотациями гибернации. Мне нужно знать, что использовать в файле HBM, чтобы показать то же сообщение проверки.
1 ответ
Предполагая, что вы не можете провести рефакторинг своего кода, чтобы полностью переключиться на аннотации (потому что, очевидно, таким образом ваш код будет очень читабельным и обслуживаемым), я думаю, что вы можете использовать реализацию проверки bean-компонентов инфраструктуры hibernate, используя конфигурацию xml. Вы должны сначала добавить META-INF/validation.xml
подать в ваш последний артефакт. Это будет иметь такую структуру:
<validation-config
xmlns="http://xmlns.jcp.org/xml/ns/validation/configuration"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/validation/configuration
http://xmlns.jcp.org/xml/ns/validation/configuration/validation-configuration-2.0.xsd"
version="2.0">
<default-provider>com.acme.ValidationProvider</default-provider>
...
<constraint-mapping>META-INF/validation/constraints-car.xml</constraint-mapping>
...
</validation-config>
Вы можете взглянуть на его документацию для деталей его схемы. Важным элементом в этом файле является <constraint-mapping>
который позволяет вам определить адрес файла, который содержит ваши фактические определения ограничений. Внутри этого вы можете определить свои ограничения следующим образом:
<constraint-mappings
xmlns="http://xmlns.jcp.org/xml/ns/validation/mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/validation/mapping
http://xmlns.jcp.org/xml/ns/validation/mapping/validation-mapping-2.0.xsd"
version="2.0">
<default-package>com.your.project.model.package</default-package>
<bean class="Person" ignore-annotations="true">
<field name="firstName">
<constraint annotation="javax.validation.constraints.Size">
<element name="max">80</element>
</constraint>
</field>
</bean>
</constraint-mappings>
Я не запускал этот код, но я думаю, что вы поняли;)