0

Java の永続性と休止状態により、プロパティ レベルの制約をエンティティに簡単に追加できます。

@Entity
@Table(name = "party")
public class PartyEntity {
    @Future
    public DateTime start;
}

javax.validation.constraint.Future注釈は、特定の実装なしで定義されます。

@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {})
public @interface Future {
    // ...
}

実際の検証はどこで実装されていますか? 管理者によるオーバーライドを許可するには、これをどのように拡張できますか?

ここには示されていませんが、この制約の別の目的で既にグループを使用しています。

4

2 に答える 2

2

によって提供される多くのバリデーターの実装hibernate-validator: http://docs.jboss.org/hibernate/validator/5.0/reference/en-US/html/validator-usingvalidator.html#validator-defineconstraints-builtin

Maven を使用している場合は、次の依存関係をpom.xmlファイルに追加するだけです。

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.0.0.Alpha1</version>
</dependency>

管理者によるオーバーライドを許可するには、これをどのように拡張できますか?

最も簡単な方法は、代わりに自分で作成することです。

于 2012-07-24T05:43:00.473 に答える
0

JSR 303の検証は、JPA とはあまり直接関係がありません。もちろん、JPAエンティティもそれで検証できます。実際の質問になると、ほとんどの場合、php-coder のアドバイスに従い、新しい注釈と注釈の使用によって設定された制約の検証を実装する必要があります。

なんらかの不可解な理由により、実装での Future アノテーションの処理方法を本当に変更する必要がある場合、解決策はもちろん実装固有です。Hibernate Validator 4.3 を使用すると仮定すると、検証制約の実際のチェックは次の場所で行われます。

これらの実装がどのように選択されるかは、 で影響を受ける可能性がありますorg.hibernate.validator.internal.metadata.core.ConstraintHelper。使用する実装のソースを IDE に添付することをお勧めします。そうすれば、この種の詳細に簡単に移動できます。

于 2012-07-24T06:11:36.430 に答える