Java 工作单元模式的验证策略

Java 工作单元模式的验证策略,java,validation,jpa,unit-of-work,Java,Validation,Jpa,Unit Of Work,当我使用(与JPA一起使用)时,我从存储库中获取一个实体,对其进行修改,并将工作单元的修改隐式地保存到数据库中 现在我想知道如何使用工作单元模式执行验证。如果我将更改(来自用户输入)应用于域对象并在之后进行验证,则即使验证失败,该对象的值也会更改。如何避免将状态非法的对象写入数据库?回滚工作单元 OOP的目标之一是对象监视自己的状态,这样它们就永远不会接受非法值。对于这种方法,我不得不抛出异常,这与上面的bean验证(和spring验证)方法相反。但也许它更简单更好 您将使用什么样的验证策略(在

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

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

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

您将使用什么样的验证策略(在域驱动设计中)

如何避免将状态非法的对象写入数据库?回滚工作单元

如果您使用Bean验证API,它将抛出异常,更改将不会持久化(如果启用,验证将在
PrePersist
PreUpdate
PreRemove
生命周期事件的最后阶段发生)

对于JPA2.0,只需在类路径上放置一个Bean验证实现


对于JPA1.0,请参阅。

来补充答案,我非常确定JPA(或hibernate)对在setter中使用数据验证提出了一些非常具体的警告。类似于“在返回对象之前如何初始化对象是我们自己的事情,setter可以被多次调用”。