2010/08/16

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

■[Java]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
●データ型を変更して解決した例
Hibernate throws a PropertyAccessException or NullPointerException when I load or query an object!
http://www.hibernate.org/116.html
Primitive type exception
http://opensource.atlassian.com/projects/hibernate/browse/HBX-490