0

現在、私はクラスを持っていますBaseSchedule 。それは4つのクラス(構成)で使用されています。他のクラスではなく、2 つの使用クラスで検証したいと思います。私はそうする方法に少し困惑しています。

BaseScheduleは次のように見えます:

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

    private Date startDateTime;

    private Date endDateTime;
}

データベースにデータを永続化するときに、 startDateTimeandが null でないことを確認したいと思います。endDateTime通常@NotNull、各フィールドに を指定します。

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

しかし...私の場合、TimeSlotTemplatenullになることがわかっているため、検証は必要ありません。

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

2 に答える 2

1

Hibernate Validator を BV プロバイダーとして使用している場合、カスタムのデフォルト グループ シーケンス プロバイダーを使用することが 1 つの解決策になることがあります。

これが機能するには、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 に設定できます...

もう 1 つの方法は、クラスを階層に追加することです。BaseSchedule には必要なプロパティが含まれており、たとえば ValidatedSchedule (BaseSchedule を拡張) はそれらをオーバーライドし、notnull チェックを実行します。これが機能するかどうかはわかりません。また、これはおそらくあなたの問題に対する最良の解決策ではないでしょう..?

于 2013-10-17T20:01:10.843 に答える