web-dev-qa-db-ja.com

JPAとHibernateを使用する場合の@ Size、@ Lengthおよび@Column(length = value)の違い

次の3つのフィールドの検証チェックの違いは何ですか?

@Entity
public class MyEntity {

    @Column(name = "MY_FIELD_1", length=13)
    private String myField1;
    @Column(name = "MY_FIELD_2")
    @Size(min = 13, max = 13)
    private String myField2;
    @Column(name = "MY_FIELD_3")
    @Length(min = 13, max = 13)
    private String myField3;

    // getter & setter

}

最初のものはDDLのものに関係していると読みました。 2つ目は、Bean検証用です。 3番目は、休止状態の検証用です。

あれは正しいですか?私がまだ理解していないのは、いつどれを使用する必要があるかということです。これらの注釈の1つがトリガーされるのはいつですか?

編集:次の状況を考えてください:長さ13の文字列型のフィールドを持つエンティティを開発する要件がある場合、上記の方法のどれを選択しますか?またはさらに良い:あなたがあなたの目的に合ったものを見つけるためにあなた自身に尋ねる必要がありますか?

47
Chris311
  1. @Column はJPA注釈であり、length属性はスキーマ生成ツールによって使用され、関連するSQL列の長さを設定します。
  2. @Size は、関連付けられた文字列の値が最小値と最大値で制限されていることを検証するBean検証アノテーションです。
  3. @Length はHibernate固有の注釈であり、@Sizeと同じ意味を持ちます

したがって、2.3.は、Bean Validationを使用してStringの長さを検証する必要があります。汎用なので2.を選択します。

91
Vlad Mihalcea