如何将复杂的业务验证与JSR-303合并?

时间:2011-07-15 07:19:02

标签: java validation jpa ejb bean-validation

我在目前的用例中遇到了验证问题。 我的应用程序具有标准结构(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验证时,您能否提供一些建议或一般规则来处理更复杂的业务验证(不仅仅是单独检查单个字段的值)?

2 个答案:

答案 0 :(得分:3)

我认为Bean Validation不是实现这种业务逻辑的正确解决方案。

相反,您可以在setNumberType()实体的PhoneNumber方法中实施此检查。在那里你有旧的价值,并且与服务层中的实现相比,没有机会通过规避(意外或有意)实施支票的服务来执行非法的状态转换。

答案 1 :(得分:0)

Here你可以找到一个很好的描述如何编写一个可以进行“跨领域”验证的自定义验证器。