我为唯一的电子邮件制作了自定义验证注释(当用户注册时,程序会检查电子邮件是否已存在于数据库中)。
一切正常,但是当我需要修改用户信息而不是创建新信息时,我遇到了一个问题,“电子邮件已经在使用中”
我能否以某种方式仅关闭@UniqueEmail
验证(我需要其他电子邮件模式和密码验证)?
所有验证注释都在同一个用户bean中。
谢谢。
答案 0 :(得分:0)
我将假设您正在使用javax.validation
。
首先你需要一个interface OnUpdate
:
javax.validation.groups.Default
public interface OnUpdate extends Default {}
现在您需要设置所有需要仅在UPDATE
上运行的注释:
@NotNull(groups = OnUpdate.class)
现在,您已将验证分为两组,OnUpdate
和Default
。运行Default
将包括OnUpdate
中OnUpdate
Default
{。}}的内容。
现在,这是一个有点棘手的地方 - 你需要告诉框架在每个任务上运行哪些验证。
如果使用JPA,您只需设置以下属性:
javax.persistence.validation.group.pre-update = com.my.package.OnUpdate
答案 1 :(得分:0)
进一步了解Boris Spider的答案,如果您要使用代码而不是使用persistence.xml来执行此操作,则可以创建以下bean:
@Bean
public HibernatePropertiesCustomizer hibernatePropertiesCustomizer(final Validator validator) {
return new HibernatePropertiesCustomizer() {
@Override
public void customize(Map<String, Object> hibernateProperties) {
@SuppressWarnings("rawtypes")
Class[] classes = {OnUpdate.class};
hibernateProperties.put("javax.persistence.validation.group.pre-update", classes);
}
};
}