1


0

JPAで自明ではない制約を表現する

JPAで範囲制約を表現する最良の方法は何ですか? 「この列は、1..5の間の値のみを取ることができます」のようなものを表現したいと思います。

おそらく@PrePersistと@PreUpdateを使用できます。

もっと良い方法はありますか?

2 Answer


3


Bean検証(http://jcp.org/en/jsr/detail?id=303[JSR 303])は*標準*であり、https://www.hibernate.org/412.html [Hibernate Validator]は実装(RIより正確に)であるため、これは実際にはHibernateとは関係ありません。 Bean Validation 1.0はJava EE 6の一部ですが、Java EE 6コンテナーの「外部」で使用できます。 次のようなことができます:

public class Address {

    @NotNull private String line1;
    private String line2;
    private String zip;
    private String state;

    @Length(max = 20)
    @NotNull
    private String country;

    @Range(min = -2, max = 50, message = "Floor out of range")
    public int floor;

        ...
}

最近のhttp://agoncal.wordpress.com/2010/03/03/bean-validation-with-jpa-1-0/[JPA 1.0でのBean検証]ブログ投稿では、JPA 1.0でこのAPIを使用して、エンティティリスナー( @ PrePersist`および @ PreUpdate`で検証を実行)。


1


Hibernate Validatorによって実装されるJSR 303があり、この目的に使用できます。 ただし、これはWebフレームワーク(Webアプリを構築している場合)に依存していると思いますが、これを使用してクライアント側の検証を実行することができます。 現在、これをGWTアプリと統合しようとしています。

Googleとhttps://stackoverflow.com/questions/1384968/is-there-an-implementation-of-jsr-303-bean-validation-available[SO]は、今まで知らなかった別の実装を思い付きます。 agimatec-validation