@Size、@Length、および@Column(length=value)の違い
1. 概要
このクイックチュートリアルでは、JSR-330の@Size、Hibernateの@Lengthおよび JPA @Columnの長さ属性。
一見すると、これらは同じように見えるかもしれませんが、異なる機能を実行します。 方法を見てみましょう。
2. オリジンズ
簡単に言えば、これらの注釈はすべて、フィールドのサイズを伝達することを目的としています。
@Sizeと@Lengthは類似しています。 どちらかを使用して、フィールドのサイズを検証できます。 1つ目はJava標準アノテーションで、2つ目はHibernateに固有のです。
ただし、 @Column は、DDLステートメントを制御するために使用するJPAアノテーションです。
それでは、それぞれについて詳しく見ていきましょう。
3. @Size
検証には、 @Size 、bean検証アノテーションを使用します。 @Sizeで注釈が付けられたプロパティmiddleNameを使用して、属性 minとmax:の間の値を検証してみましょう。
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 アノテーション、および@Columnのlengthの違いについて学びました。属性。 私たちは、それらの使用領域内でそれぞれを個別に調べました。
いつものように、例の完全なソースコードは、GitHubでから入手できます。