@ Size、@ Length、および@Column(length = value)の違い

1. 概要

このクイックチュートリアルでは、https://www.baeldung.com/javax-validation [JSR-330]‘s _ @ Size_、link:/hibernate-を見ていきます。 4-spring [Hibernate]‘s _ @ Length_およびlink:/the-persistence-layer-with-spring-data-jpa[JPA] _ @Column_‘s _length_属性。
一見、これらは同じように見えるかもしれませんが、異なる機能を実行します*。 方法を見てみましょう。

2. 起源

簡単に言えば、これらのアノテーションはすべて*フィールドのサイズを伝えるためのものです*。
_ @ Size_と_ @ Length_は似ています。 いずれかを使用して、フィールドのサイズを検証できます。 1つ目はhttps://docs.oracle.com/javaee/7/tutorial/bean-validation001.htm[Java標準アノテーション]で、2つ目はhttp://docs.jboss.org/ejb3/app-serverです。 /HibernateAnnotations/api/org/hibernate/validator/Length.html[Hibernate固有]。
ただし、_ @ Column_は、DDLステートメントの制御に使用するhttps://docs.oracle.com/javaee/7/api/javax/persistence/Column.html[JPAアノテーション]です。
それでは、それぞれについて詳しく見ていきましょう。

3. @サイズ

検証には、Bean検証アノテーション__ @ Size __ **、**を使用します。 _ @ Size_アノテーションが付けられたプロパティ_middleName_を使用して、属性_min_と_maxの間の値を検証しましょう:_
public class User {

    // ...

    @Size(min = 3, max = 15)
    private String middleName;

    // ...

}
最も重要なことは、* _ @ Size_は、BeanをJPAおよびHibernate *などのベンダーから独立させます。 その結果、これは_ @ Length_よりも移植性が高くなります。

4. @長さ

そして先ほど述べたように、_ @ Length_は_ @ SizeのHibernate固有のバージョンです。__Length_を使用して_lastName_の範囲を強制しましょう:
@Entity
public class User {

    // ...

    @Length(min = 3, max = 15)
    private String lastName;

    // ...

}

5. _ @ Column(length = value)_

ただし、_ @ Column_はまったく異なります。
_ @ Column_を使用して、*物理データベース列の特定の特性を示します** _ http://java.sun.com/javaee/5/docs/api/javax/persistence/Column.html#length%を使用します文字列値の列の長さを指定する_ @ Column_アノテーションの28%29 [length] _属性:
@Entity
public class User {

    @Column(length = 3)
    private String firstName;

    // ...

}
その結果、結果の列は_VARCHAR(3)_として生成され、長い文字列を挿入しようとするとSQLエラーが発生します。
_ @ Column_は、検証を提供しないため、テーブルの列プロパティを指定するためにのみ使用することに注意してください。*
もちろん、_ @ Column_を_ @ Size_ *と組み合わせて使用​​して、Bean検証でデータベースの列プロパティを指定できます。
@Entity
public class User {

    // ...

    @Column(length = 5)
    @Size(min = 3, max = 5)
    private String city;

    // ...

}

6. 結論

この記事では、_ @ Size_アノテーション、_ @ Length_アノテーション、および_ @ Column_の_length_属性の違いについて学びました。 それぞれの使用領域内で個別に調査しました。
いつものように、サンプルの完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/persistence-modules/hibernate-mapping[over on GitHub]で入手できます。