我在目前的用例中遇到了验证问题。 我的应用程序具有标准结构(WEB< - > EJB3 Services< - > EJB3 DAO< - > DB)。 我有一个实体,它已经应用了验证注释。
@Entity
class PhoneNumber {
...
private NumberType numberType;
}
其中
enum NumberType {
FIXED,
MOBILE,
ANY
}
现在我有了新的验证规则。在PhoneNumber更新中,如果之前设置为FIXED或MOBILE,则无法将NumberType更改为ANY。
在数据库操作之前检查我的Bean验证规则,并且上面的规则应该应用于服务层(至少我认为是这样),以获得数据库访问权限以获取要比较的先前实体版本。 但是,如果没有bean尚未验证,我将被迫手动检查,例如numberType不为空。
使用Bean验证时,您能否提供一些建议或一般规则来处理更复杂的业务验证(不仅仅是单独检查单个字段的值)?
答案 0 :(得分:3)
我认为Bean Validation不是实现这种业务逻辑的正确解决方案。
相反,您可以在setNumberType()
实体的PhoneNumber
方法中实施此检查。在那里你有旧的价值,并且与服务层中的实现相比,没有机会通过规避(意外或有意)实施支票的服务来执行非法的状态转换。
答案 1 :(得分:0)
Here你可以找到一个很好的描述如何编写一个可以进行“跨领域”验证的自定义验证器。