2

いくつかのフィールド (名、姓、都市など) を持つエンティティ オブジェクトがあります。ある場合には、このオブジェクトに 1 セットの制限 (null ではない、長さの制限、一意など) を適用する必要があり、他の場合には他のセットを適用する必要があります。現時点では、ユースケースごとに異なる検証方法を持つ独自のバリデーターを使用しています。

別の方法 (標準ソリューション) で検証を実行できますか?

私はHibernateでSpringを使用しています。Hibernate に実装されている JSR303 標準では、私の問題を解決できません。アノテーションでは、静的な制限セットを 1 つしか定義できないためです。実行時に再定義することはできません。

4

2 に答える 2

5

Hibernate Validator を使用すると、ConstraintMapping ( http://docs.jboss.org/hibernate/validator/4.1/api/org/hibernate/validator/cfg/ConstraintMapping.html )を介してプログラムで制約を構築できます。ドキュメントはhttp://docs.jboss.org/hibernate/validator/4.1/reference/en-US/html/programmaticapi.htmlにあります。

ConstraintMapping mapping = new ConstraintMapping();
mapping.type( Car.class )
    .property( "manufacturer", FIELD )
        .constraint( NotNullDef.class )
    .property( "licensePlate", FIELD )
        .constraint( NotNullDef.class )
        .constraint( SizeDef.class )
            .min( 2 )
            .max( 14 )
    .property( "seatCount", FIELD )
        .constraint( MinDef.class )
            .value ( 2 )
.type( RentalCar.class )
    .property( "rentalStation", METHOD)
        .constraint( NotNullDef.class );
HibernateValidatorConfiguration config = Validation.byProvider( HibernateValidator.class ).configure();
config.addMapping( mapping );
ValidatorFactory factory = config.buildValidatorFactory();
Validator validator = factory.getValidator();
于 2013-04-16T14:07:25.930 に答える
1

クラスパスのルートにあるvalidation.xmlファイルを使用して、デプロイメント時に Hibernate バリデーターを再定義できます。1 つの展開で 1 つの検証スキームのみが必要な場合は、それで機能します。独自の xml ファイルを使用して各展開を構築できます。

一方、必要な検証がアプリケーションの状態に依存する場合は、状態に依存するバリデーターが必要です。検証グループは役に立ちません。異なるが関連するエンティティ オブジェクトを使用できますか。

abstract class BaseEntity {
    private String name;
    public String getName() { return name;}
}

public class Entity1 extends BaseEntity {
    @Override
    @NotNull
    @Length(min=2, max=20)
    public String getName() { return super.getName();)
}

public class Entity2 extends BaseEntity {
    @Override
    @Length(min=2, max=10)
    public String getName() { return super.getName();)
}

関連する 2 つのクラスにリストがある場合にこれを行いました。1 つでは、リストに少なくとも 2 つの要素が必要でした。もう 1 つの場合、リストは空であるか、少なくとも 2 つの要素が必要です。

于 2013-04-16T13:50:11.827 に答える