JPA:bean验证对于预删除意味着什么?

JPA:bean验证对于预删除意味着什么?,jpa,bean-validation,Jpa,Bean Validation,JPA:bean验证对于预删除意味着什么 public class Foo { @Past private Date date; } 删除实体Foo时,如果日期有效(过去的日期),是否可以删除实体Foo?删除实体时,我们为什么要关心实体是否有效?如果为JPA激活Bean验证,则默认行为是对预持久化和预更新事件进行验证。验证的约束是默认组中的约束(默认) 要激活预删除事件的验证,必须将persistence.xml文件上的配置属性javax.persistence.valida

JPA:bean验证对于预删除意味着什么

public class Foo {

    @Past
    private Date date;
}

删除实体Foo时,如果日期有效(过去的日期),是否可以删除实体Foo?删除实体时,我们为什么要关心实体是否有效?

如果为JPA激活Bean验证,则默认行为是对预持久化和预更新事件进行验证。验证的约束是默认组中的约束(默认)

要激活预删除事件的验证,必须将persistence.xml文件上的配置属性
javax.persistence.validation.group.pre-remove
设置为要应用的验证组的值

例如,您可以创建组(这只是一个空接口):

并向要测试的字段添加约束:

public class Foo {

    @Past(groups = {DeleteGroup.class})
    private Date date;
}
并在persistence.xml上设置属性:

<property name="javax.persistence.validation.group.pre-remove" value="yourpackage.DeleteGroup" />

然后,在delete事件中,将验证该约束。除非您也将其分配给默认组,否则在预插入或预更新时不会对其进行验证

如果要确保记录未经处理(例如,字段
canBeDeleted
true
)或满足某些更复杂的条件,则此选项非常有用

<property name="javax.persistence.validation.group.pre-remove" value="yourpackage.DeleteGroup" />