【问题标题】:Validation strategy for the unit of work pattern工作单元模式的验证策略
【发布时间】:2011-03-01 08:20:57
【问题描述】:

当我使用unit of work pattern(使用JPA)时,我从存储库中获取一个实体,对其进行修改,并将工作单元的修改隐式保存到数据库中。

现在我想知道如何使用工作单元模式执行验证。如果我将更改(来自用户输入)应用于域对象并在此之后进行验证,那么即使验证失败,该对象的值也会更改。有什么方法可以避免将具有非法状态的对象写入数据库?回滚工作单元?

OOP 的目标之一是对象监视它们自己的状态,因此它们永远不会接受非法值。对于这种方法,我必须抛出异常,它与上面的 bean 验证(和 spring 验证)方法相反。但也许它更简单更好。

您会使用什么验证策略(在领域驱动设计中)?

【问题讨论】:

    标签: java validation jpa unit-of-work


    【解决方案1】:

    有什么方法可以避免将状态非法的对象写入数据库?回滚工作单元?

    如果您使用 Bean Validation API,它将抛出异常并且更改不会被持久化(如果启用,验证应该在 PrePersistPreUpdatePreRemove 的最后阶段发生生命周期事件)。

    使用 JPA 2.0,只需将 Bean Validation 实现放在类路径上。

    对于 JPA 1.0,请参阅 this previous answer

    【讨论】:

    • 补充答案,我很确定 jpa(或休眠)有一些非常具体的警告,反对在 setter 中使用数据验证。类似于“我们如何在对象返回之前对其进行初始化是我们自己的事情,并且可以多次调用 setter”。
    猜你喜欢
    • 1970-01-01
    • 2012-09-26
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多