我在数据库中有一个长度为 512 的列。它将包含多个用“;”分隔的电子邮件地址。如何在实体中验证其各自的变量,以便所有电子邮件地址都有效。
列表将不起作用,因为我需要将其保留在列中。这是数据:
@Basic
@Column(name = "CC_EMAIL_ADDRESS", nullable = true, length = 512)
private String emailCC;
这种方式我在我的项目中使用成功
@NotEmpty
@Email
@Size(max = 255)
@Column(unique = true)
private String email;
@PrePersist
@PreUpdate
private void prepareData(){
this.email = email == null ? null : email.toLowerCase();
}
使用javax.validation
图书馆。如果在您设置尝试持久化时验证失败,这将引发验证异常email
,或者您可以以 . 开头进行手动验证ValidatorFactory
。
@NotNull(message="{email.required}")
@Pattern(regexp = "[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\."
+ "[A-Za-z0-9!#$%&'*+/=?^_`{|}~-]+)*@"
+ "(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\\.)+[A-Za-z0-9]"
+ "(?:[A-Za-z0-9-]*[A-Za-z0-9])?",
message = "{invalid.email}")
private String email;
使用验证和正则表达式:
@Basic
@Pattern(regexp = "\\w+@\\w+\\.\\w+(,\\s*\\w+@\\w+\\.\\w+)*")
@Column(name = "CC_EMAIL_ADDRESS", nullable = true, length = 512)
您可以在实体中使用 @PrePersist 回调事件来验证电子邮件,然后再将其保存到数据库。
@PrePersist
public void validateEmails(){
//Validate Here
}
或者您可以在您的实体中创建一个 setter 方法并在 setter 方法中验证数据。