现在我有一个班级BaseSchedule
它由4个班级(作曲家)使用。我想验证两个使用类而不是其他类。我对如何这样做感到有点困惑。
我的BaseSchedule
如下所示:
@Embeddable
@DatesStartBeforeEnd(start = "startDateTime", end = "endDateTime")
public class BaseSchedule implements Serializable {
private Date startDateTime;
private Date endDateTime;
}
我想检查以确保在将数据持久保存到数据库时startDateTime
和endDateTime
不为空。通常我会为每个字段提供@NotNull
。
public class TimeSlot implements Scheduleable {
@Embedded
private BaseSchedule schedule;
}
但是......就我的TimeSlotTemplate
而言,我不想要验证,因为我知道它会为空。
public class TimeSlotTemplate extends SchedulableClassTemplateEvent {
@Embedded
private BaseSchedule schedule;
}
答案 0 :(得分:1)
如果您使用Hibernate Validator作为BV提供商,一种解决方案可能是使用自定义default group sequence provider。
为了实现这一点,您的BaseSchedule
对象必须知道"角色"它目前有,例如通过将带有SlotSchedule
,TemplateSchedule
等值的枚举传递给其构造函数。根据角色,组序列提供程序可以确定要验证的序列,如果角色为@NotNull
,则返回不包含TemplateSchedule
约束的序列。
并非此方法要求您在JPA生命周期验证期间使用默认序列。
答案 1 :(得分:0)
我认为这可以使用@PrePersist Annotation完成。
@PrePersist
public void prePersist(){
if(isPerformNullableCheck()){
// check for null values and raise an error if invalid
}
}
在TimeSlotTemplate中,您可以将performNullableCheck属性设置为false ...
另一种方法可能是在层次结构中添加一个类。 BaseSchedule包含所需的属性,例如ValidatedSchedule(扩展BaseSchedule)会覆盖它们并执行notnull检查。不知道这是否有效。这也许不是解决问题的最佳方案..?