hibernateで、「Null value was assigned to a property of primitive type setter of 〜」ってエラーが出る時の対処法

hibernateを使っていると、実行時に

Null value was assigned to a property of primitive type setter of "プロパティ名"

っていうエラーが出てくることがあります。


このエラーが出てくる原因としては、
DBのフィールドで、データタイプが、プリミティブ型(Integerとか)でnull可能なときに、
hibernateを利用したSetterからデータを入力しようとすると
Setterのフィールドタイプはプリミティブ型(ここではint)なので、
intにはnullが入らずエラーが出ているということみたいです。


なので、対処法としては
Setterのデータ型をラッパークラスにするといいみたいです。

例えば、int hogeというプロパティとsetterがあるときに
Integer型を使います。

Integer hoge

中略

public void setHoge(Integer h) {
this.hoge = h;
}

に変える感じ。


今のところ、Getterの方は特に変えなくてもエラーが出ていないようです、
少し腑に落ちないところもありますが。。。


他の方法としては、null可能なカラムをnullはダメにしちゃうとか、
初期値を0に設定するとかで解決できるそうです。



参考になりそうなページを挙げておきます。
一部英語で泣きそうになりますが、上記のことを言ってるような気がします。。。


●DBを変えて解決した例
超体育会系:hibernate error - livedoor Blog(ブログ)
http://blog.k-go.org/archives/50091712.html

●データ型を変更して解決した例

http://www.hibernate.org/116.html

  • Primitive type exception

http://opensource.atlassian.com/projects/hibernate/browse/HBX-490