2

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

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

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

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

4

1 回答 1

2

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

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

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

对于 JPA 1.0,请参阅这个先前的答案

于 2010-06-08T19:55:35.750 回答