1. 概要

このクイックチュートリアルでは、JSR-330@SizeHibernate@Lengthおよび JPA @Column長さ属性。

一見すると、これらは同じように見えるかもしれませんが、異なる機能を実行します。 方法を見てみましょう。

2. オリジンズ

簡単に言えば、これらの注釈はすべて、フィールドのサイズを伝達することを目的としています。

@Size@Lengthは類似しています。 どちらかを使用して、フィールドのサイズを検証できます。 1つ目はJava標準アノテーションで、2つ目はHibernateに固有のです。

ただし、 @Column は、DDLステートメントを制御するために使用するJPAアノテーションです。

それでは、それぞれについて詳しく見ていきましょう。

3. @Size

検証には、 @Size bean検証アノテーションを使用します。 @Sizeで注釈が付けられたプロパティmiddleNameを使用して、属性 minmax:の間の値を検証してみましょう。

public class User {

    // ...

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

    // ...

}

最も重要なことは、 @Sizeにより、BeanがJPAやHibernateなどのベンダーから独立していることです。 結果として、これは@Lengthよりも移植性があります。

4. @Length

そして、先ほど述べたように、 @長さのHibernate固有のバージョンです @サイズ。 の範囲を強制しましょう苗字を使用して @長さ

@Entity
public class User {

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

    // ...

}

5. @Column(length = value)

ただし、@Columnはまったく異なります。

@Columnを使用して物理データベース列の特定の特性を示します。@Columnアノテーションのlength属性を使用しましょう文字列値の列の長さを指定するには:

@Entity
public class User {

    @Column(length = 3)
    private String firstName;

    // ...

}

その結果、結果の列は VARCHAR(3)として生成され、より長い文字列を挿入しようとするとSQLエラーが発生します。

@Column は、検証を提供しないため、テーブル列のプロパティを指定するためにのみ使用することに注意してください。

もちろん、@Columnを@Sizeと一緒に使用して、BeanValidationでデータベースの列プロパティを指定できます。

@Entity
public class User {

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

    // ...

}

6. 結論

この記事では、 @Size アノテーション、 @Length アノテーション、および@Columnlengthの違いについて学びました。属性。 私たちは、それらの使用領域内でそれぞれを個別に調べました。

いつものように、例の完全なソースコードは、GitHubから入手できます。