2013-04-03 4 views
5

のJavaエンティティクラスで@Idフィールドに@NotNull注釈を入れるためにどのような理由です:は、私はエンティティクラスのコードを発見した

@Id 
@NotNull 
@Column(name = "ID") 
private Long id; 

@Idがすでに設定されている場合@NotNull注釈が値を持っていますか?

+3

データベースの自動インクリメントされた値またはシーケンスを使用している場合は、 '@ NotNull'アノテーションを使用しないでください。エンティティを永続化しようとすると例外がスローされます。 – greenkode

+0

Hm ...私はコードを単純化しますが、元のものには '@ SequenceGenerator'と' @ GeneratedValue'があり、挿入時に実行時にエラーはありません...異なるライブラリとバージョンが異なって動作するようです。興味ありがとう。 +1。 – gavenkoa

答えて

6

@NotNull@Sizeなどの検証目的のためにある追加。これは、検証エンジンがユーザ入力がOKかどうかをチェックするためのルールを定義します。これらのアノテーションの周りで検証を行っても、オブジェクトがJPAオブジェクトであることは必ずしも分かりませんが、2つはよく一緒に使用されます。

DBレベル(制約違反)での失敗に頼ってnull値を示すのではなく、javax.validationを使用している場合は、両方の注釈を使用する必要があります。

+0

ありがとう+1。最も直接的な答え。 – gavenkoa

0

これは静的解析用であり、hibernate/ormとは関係がありません。それはintellij固有の注釈ですか?

コンパイル時に、@NotNullとして注釈が付けられたフィールドにNULLを割り当てるときに警告することができます。

依存しているコードは、返される値が決してnullにならないことを知っています。

+2

JSR303(Bean Validation)はJPAのようなもので、Java EEの一部です。 – BalusC

1

id/primary keyがテーブル内で最も重要なものであるので、uniquelyはテーブル内の行を識別します。

したがって、nullであってはなりません。それがnull値の世話をしないように

1

@Id

* Specifies the primary key of an entity. 
* The field or property to which the <code>Id</code> annotation is applied 
* should be one of the following types: any Java primitive type; 
* any primitive wrapper type; 
* <code>String</code>; 
* <code>java.util.Date</code>; 
* <code>java.sql.Date</code>; 
* <code>java.math.BigDecimal</code>; 
* <code>java.math.BigInteger</code>. 

に使用されています。ヌル値を防ぐには、@NotNull@Idと一緒に使用されます。

+0

ありがとうございます。 +1。私はhttp://docs.oracle.com/javaee/6/api/javax/validation/constraints/NotNull.htmlとhttp://docs.oracle.com/javaee/6/api/javax/persistence/Idを読んでいます。 htmlですが、これは理解に役立ちません。 – gavenkoa

+0

ヌルの主キーを許可すると、SQL仕様に違反します。 – Powerlord

0

はい、これはあなたのIDフィールドをnullにできないようにします。必須です。

しかし、あなたは、idは自動インクリメントしたい場合は、それを削除し、

@GeneratedValue(戦略= GenerationType.AUTO)

関連する問題