java – 仅在保存(插入)时的Hibernate验证
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 仅在保存(插入)时的Hibernate验证,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1736字,纯文字阅读大概需要3分钟。
内容图文
![java – 仅在保存(插入)时的Hibernate验证](/upload/InfoBanner/zyjiaocheng/704/96226fba2b484abcb37f0bec0b5583d8.jpg)
我们遇到遗留代码的问题. “用户名”字段有一个验证集,验证其长度并确保它至少包含一个字母:
@Column(name = "username")
@Size(min = 4, max = 40)
@Pattern(regexp = "^.*[a-zA-Z]+.*$")
private String username;
我们遇到的问题是一些现有的遗留数据不适合这些验证,我正在尝试找到一种方法来使遗留数据(旧用户)忽略这些验证,同时仍然应用于新创建的用户.
我正在考虑将验证移动到setUsername(…)方法(因此值将仅在实际更改时验证),但这会导致异常:
javax.validation.ValidationException: Annotated methods must follow the JavaBeans naming convention. setUsername() does not.
我还确保将实体设置为dynamicUpdate = true,但这没有用,因为即使没有发生更改,hibernate也会验证所有属性.
如何防止在更新期间对现有实体执行这些验证?
我不希望修复影响同一实体上的其他属性验证,我无法更改hibernate配置.
解决方法:
经过两天的研究,我发现了如何完成这项工作.
显然,指定仅在INSERT上验证的验证并不困难.所需的唯一更改是将这些验证设置为特定验证组,并在INSERT / pre-persist事件期间验证此组.
首先,我创建了一个名为platform.persistence.InsertOnlyValidations的接口,用作仅在预先保留期间验证的组.
然后,我将该组添加到用户名字段验证中:
@Column(name = "username")
@Size(min = 4, max = 40, groups = {InsertOnlyValidations.class})
@Pattern(regexp = "^.*[a-zA-Z]+.*$", groups = {InsertOnlyValidations.class})
private String username;
这指示hibernate不要将这些验证用作默认组的一部分.现在,我需要指示hibernate在插入期间验证这些验证规则.
这样做的方法非常简单,我需要传递属性javax.persistence.validation.group.pre-persist,同时指出在预先持久化事件期间将验证哪些组:
javax.persistence.validation.group.pre-persist=javax.validation.groups.Default,platform.persistence.InsertOnlyValidations
这指示hibernate在预先持久化事件期间,除了InsertOnlyValidations组中包含的所有验证之外,还将验证所有默认验证(javax.validation.groups.Default).
内容总结
以上是互联网集市为您收集整理的java – 仅在保存(插入)时的Hibernate验证全部内容,希望文章能够帮你解决java – 仅在保存(插入)时的Hibernate验证所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。