Java から mysql を使うために O/R マッピングツールである Hibernate 3 を利用しています。
Hibernate を使うと,JDBC のレコードセットの内容を Java クラスへセットするような退屈なコードを書かなくて済むので助かります。
先日,ビューに対して Hibernate のマッピングクラスを生成したときです。ビューの中には明らかにレコードが存在するのですが,Hibernate を経由してレコードを取得すると null が返される事象に遭遇しました。Hibernate から返される List の要素数は想定通りの数なのですが,List の要素が null になっています。
原因が分からず調べたところ,ビューの場合は全列がプライマリキーとして扱われるため,レコード中に 1 列でも null があると,行オブジェクト自体を null にしてしまうようです。
正式な解決方法(?)が分からなかったので,IFNULL を使って null の場合には空文字列を出力するようにしたらレコードを取得できるようになりました。
SELECT IFNULL(table.column, "") .....