用于bean验证的hbm xml文件中的@Size(max = 80)的等效项

时间:2018-01-04 08:22:30

标签: java xml hibernate hbm hbmxml

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

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

  

   lkjsajf,asdmcladskfhncv,sd.mcvjhsdlk;焦耳; lsdnc ;; sadkjlfhsdnvcjsdhfvdsnkcjlsdjlfcujdslknfjkds; hgdsjnfajijujjfkvlfdsvil; djsvmjds; ocujas; mcklsdavhodsalvnlsdka; hvdslnvc; lsidhvydsknvlioadsiugvpodsjv; sdaou'gvdpsovjl; CS; llhavfaskgjvlkds'jvc'dsajouopds   “fjdls; JVCL;

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

1 个答案:

答案 0 :(得分: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>

您可以查看其documentation以了解其架构的详细信息。该文件中的一个重要元素是<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>

我没有运行此代码,但我认为你有了这个想法;)