JPA:Bean验证对预删除意味着什么?
public class Foo {
@Past
private Date date;
}
[删除实体Foo时,如果日期有效(过去的日期),则可以删除实体Foo还是不能删除它?删除实体时,为什么我们要关心该实体是否有效?
如果为JPA激活了Bean验证,则默认行为是对持久性事件和更新前事件进行验证。验证的约束是默认组(默认)中的约束。
要激活删除前事件的验证,必须将persistence.xml文件上的配置属性javax.persistence.validation.group.pre-remove
设置为要应用的验证组的值。
例如,您可以创建组(这只是一个空接口):
public interface DeleteGroup {
}
并将约束添加到要测试的字段:
public class Foo {
@Past(groups = {DeleteGroup.class})
private Date date;
}
并且在persistence.xml上设置属性:
<property name="javax.persistence.validation.group.pre-remove" value="yourpackage.DeleteGroup" />
然后,在删除事件上,将验证该约束。除非您也将它也分配给Default组,否则它不会在插入前或更新前进行验证。
如果您要确保未处理记录(例如,字段canBeDeleted
为true
)或满足某些更复杂的条件,则不能删除该记录,这很有用。