@Entity
アノテーションが付けられたエンティティがあります。CREATE TABLE
スクリプトの作成を担当している場合、NOT NULL
キーワードを使用してデータベースに列を作成できるのに、なぜ@Column( nullable = false )
を指定する必要があるのですか?フィールドでこのプロパティを使用する利点を示す例はありますか?
特に JSR303 @NotNullアノテーション も追加する場合は、エラーメッセージとエラー処理が改善されます。
列をNOT NULL
として作成したが、JPAにnullではないことを伝えない場合、JPAはnull値がOKであると想定します。 nullを含むオブジェクトを保存しようとすると、オブジェクトがDBに送信され、DBレベルのエラーが発生します。これにより、データベース内のログスパムが増加し、エラーからどのテーブルのどの列が問題であったかを判断するのがはるかに難しくなります。
それらにnull以外のアノテーションを付けると、JPAは保存する前に例外をスローし、DBログスパムを回避し、通常はより良いエラーを提供します。特に、JPAプロバイダーがJSR303をサポートし、nullable=false
を内部で@NotNull
に変換するか、@NotNull
を追加した場合、正確に確認できるデータ構造が提供されます。カスタマイズ可能なテンプレートエラーメッセージとともに、どのオブジェクトのどのフィールドがどのような理由で拒否されたか。
NOT NULL
フィールドについてJPAに伝える必要があるのはそのためです。それに加えて、コードで作業している他の人にとっても、DBスキーマを読む必要なく理解しやすくなります。
さらに、列にnullable = false
in @ManyToOne
アノテーション、HibernateはINNER JOIN関連テーブルへのクエリを実行します。 nullable = true
は結果を与えるLEFT JOIN。
それは他の違いです。
あなたの場合、実際の利点はないかもしれませんが、: