0

现在我有一个类BaseSchedule 它被 4 个类(组合)使用。我想在两个使用类中验证,而不是在其他类中验证。我对如何做到这一点有点困惑。

我的BaseSchedule样子如下:

@Embeddable
@DatesStartBeforeEnd(start = "startDateTime", end = "endDateTime")
public class BaseSchedule implements Serializable {

    private Date startDateTime;

    private Date endDateTime;
}

当我将数据持久保存到我的数据库时,我想检查以确保startDateTimeand不为空。endDateTime通常我会为@NotNull每个字段提供一个。

public class TimeSlot implements Scheduleable {
  @Embedded
  private BaseSchedule schedule;
}

但是......在我的情况下,我TimeSlotTemplate不想要验证,因为我知道它将为空。

public class TimeSlotTemplate extends SchedulableClassTemplateEvent {
    @Embedded
    private BaseSchedule schedule;
}
4

2 回答 2

1

如果您使用 Hibernate Validator 作为 BV 提供程序,一种解决方案可能是使用自定义默认组序列提供程序

为此,您的BaseSchedule对象必须知道它当前具有的“角色”,例如通过将具有诸如 等值的枚举传递SlotScheduleTemplateSchedule它的构造函数。然后,根据角色,组序列提供者可以确定要验证的序列,如果角色是 ,则返回不包含@NotNull约束的序列TemplateSchedule

并不是说这种方法要求您在 JPA 生命周期验证期间使用默认序列。

于 2013-10-18T08:12:02.780 回答
0

我认为这可以使用@PrePersist 注解来完成。

@PrePersist
public void prePersist(){
 if(isPerformNullableCheck()){
        // check for null values and raise an error if invalid
 }
}

在您的 TimeSlotTemplate 中,您可以将 performNullableCheck 属性设置为 false ...

另一种方法可能是将一个类添加到层次结构中。BaseSchedule 包含所需的属性,例如 ValidatedSchedule(扩展 BaseSchedule)会覆盖这些属性并执行 notnull 检查。不知道这是否有效。此外,这可能不是您问题的最佳解决方案..?

于 2013-10-17T20:01:10.843 回答