Эквивалент @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>

Я не запускал этот код, но я думаю, что вы поняли;)

Другие вопросы по тегам