我需要知道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文件中使用什么来显示相同的验证消息。
答案 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>
我没有运行此代码,但我认为你有了这个想法;)