0

我需要知道 hibernate 模型类中使用的 @size 注释的等效项,我们可以在 hbm.xml 文件中使用它。

小背景:所以我遇到了这个问题,其中列大小在数据库中指定为 255,并且我使用 textArea html 标记的 maxLength 属性将相应输入框中的字符限制为 255。用户不能输入超过 255 个字符。但是,当您在仅包含 255 个字符的文本框中输入某些乱码文本时,代码会在保存时中断。日志说我们正在尝试输入 256 个字符!输入的示例文本:

lkjsajf,asdmcladskfhncv,sd.mcvjhsdlk;j;lsdnc;;sadkjlfhsdnvcjsdhfvdsnkcjlsdjlfcujdslknfjkds;hgdsjnfajijujjfkvlfdsvil;djsvmjds;ocujas;mcklsdavhodsalvnlsdka;hvdslnvc;lsidhvydsknvlioadsiugvpodsjv;sdaou'gvdpsovjl;cs;llhavfaskgjvlkds'jvc'dsajouopds 'fjdls;jvcl;

为了解决这个问题,我在模型的相应列上添加了@size 注释,该注释供 hibernate bean 验证使用,并防止在页面上引发异常并显示验证消息。我的项目混合了 hbm 映射文件和带有休眠注释的模型类。我需要知道在 hbm 文件中使用什么来显示相同​​的验证消息。

4

1 回答 1

0

假设您无法重构代码以完全切换到注释(因为显然这样您的代码将更具可读性和可维护性),我认为您可以使用使用 xml 配置的 hibernate 框架的 bean 验证实现。您应该首先将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>

我没有运行这段代码,但我想你明白了;)

于 2018-01-04T08:57:17.540 回答