在使用jpa时,比如我使用hibernate作为实现,默认情况下如果classpath下有bean validation实现会自动开启JSR-303验证。其通过Listener实现,即可以在如insert、update之前执行验证,如果验证失败会直接抛出验证失败异常。接下来可进行异常处理。
现在的问题是:
1、比如我们在Web层进行验证,如使用SpringMVC,此时我们可以直接在web层使用JSR-303验证,而且可以控制 什么时候需要验证;
2、当然也可以在业务逻辑层进行,这个可以参考Spring3.1 对Bean Validation规范的新支持(方法级别验证);
3、现在jpa也支持验证实体。
所以此时如果不希望jpa进行验证,可以考虑使用如下代码进行关闭:
为什么jpa默认的实现不好呢?这里给大家举个例子:
发送消息:
标题:5-200个字符
内容:5-50000个字符
假设用户编辑了一个消息,此时用户在发送时突然有事要离开,这个时候发现内容还没写,要保存草稿,如果此时保存,会进行jpa的bean validation,此时肯定不通过,但是对于这种情景我们是不需要的。
因此这种注解的验证,只能满足大部分需求,如果一旦满足不了,连不想用都不行。即要么全用,要么全不用。即使用XML方式也会有这个问题。
解决方案:
应该提供一些开关数据来控制,改变那种要么全 要么无的方案。
但是bean validation也提供了分组的概念,即按组验证,但是这个对我们来说没有什么用处。
<propertyname="javax.persistence.validation.group.pre-update"