私は更新/追加の両方にBeanを使用する必要があります。今私は名前が一意でなければならないとして検証を持っています。Spring JSR 303検証アクセス中のその他のフィールド値
追加中に、DBをクエリすることによって一意の値をチェックするので、検証部分が正しく機能しています。
私は同じレコードを更新したいとき、DB内のユニーク制約をチェックしようとしており、レコードが既に存在するので失敗します。
ロール豆
public class Role {
@NotEmpty
@Pattern(regexp = "[a-zA-Z ]*")
@UniqueValue(query = AppConstants.UNIQUE_VALIDATION_DB_QUERY)
private String roleName;
private String roleDesc;
private boolean active;
private String maskRoleName;
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public String getRoleDesc() {
return roleDesc;
}
public void setRoleDesc(String roleDesc) {
this.roleDesc = roleDesc;
}
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
}
マイカスタム注釈バリ私はスクリーンロール名が検証されてからのみRoleDescフィールドを更新して検証エラーがスローされます今
public class UniqueValueValidator implements ConstraintValidator<UniqueValue, String> {
@Autowired
private ValidationDAO validationDAO;
private String query;
public void initialize(UniqueValue uniqueValue) {
this.query = uniqueValue.query();
}
public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
if (!StringUtils.isEmpty(value) && !StringUtils.isEmpty(query)) {
return validationDAO.isValidUniqueField(query, value);
}
return true;
}
}
同じロール名がDBに存在します。私は、次の更新画面が前の値から変更された場合にのみフィールドを検証するということを言って、画面からカスタムバリデーターに他の変数を送ることができる方法はありますか?
しかし、値が変更された場合にのみ、検証情報を渡します。編集/追加でも検証する必要があるので、値が変更された場合にのみ検証する必要があります – Pathfinder
他のフィールド値(maskRoleName)を現在のフィールドと一緒に渡す方法はありますか? masroleName = roleNameに続いて検証がないことを確認してください – Pathfinder
名前が変更されたかどうかを確認するために更新する際に、エンティティをルックアップするために使用できる主キーがあると思われます。これはあなたのRoleオブジェクトと一緒に渡したい情報です。ただし、この特定の問題については、代わりにデータベース列に一意の制約を追加し、違反が発生した場合には必ずその障害を引き起こすようにします。 – Chill