【发布时间】:2020-03-04 01:42:45
【问题描述】:
JPA:bean 验证对于预删除意味着什么?
public class Foo {
@Past
private Date date;
}
删除实体 Foo 时,如果日期有效(过去的日期),实体 Foo 可以删除还是不能删除?删除实体时,为什么要关心实体是否有效?
【问题讨论】:
标签: jpa bean-validation
JPA:bean 验证对于预删除意味着什么?
public class Foo {
@Past
private Date date;
}
删除实体 Foo 时,如果日期有效(过去的日期),实体 Foo 可以删除还是不能删除?删除实体时,为什么要关心实体是否有效?
【问题讨论】:
标签: jpa bean-validation
如果为 JPA 激活 Bean Validation,则默认行为是验证 pre-persist 和 pre-update 事件。验证的约束是默认组中的约束(默认)。
要激活删除前事件的验证,您必须将 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" />
然后,在删除事件中,该约束将被验证。除非您也将其分配给默认组,否则不会在预插入或预更新时对其进行验证。
如果您想确保一条记录在未处理(例如,canBeDeleted 字段为true)或满足一些更复杂的条件时不能被删除,这将非常有用。
【讨论】: