Hibernate 入門記 番外編 HSQLDB の外部結合
Hibernate とはあまり関係ないのですが,ここ二回ほど悩まされた HSQLDB の外部結合に関する補足です.
HSQLDB の 1.7.2.4 がリリースされたので,外部結合がちゃんと出来るようになったか確認してみました.
...
ぐはぁっ,何も変わらず.(;_;)
いくらなんでもおかしいですよね.このところ,マメにバージョンアップが続いていて,その前の RC の時だって頻繁に更新されていたわけです.それなのに,外部結合がまともに出来なくてほったらかされているとはとうてい考えられません.
もしかして... もしかすると... もしかしなくても... バグっているのはおいら?
そんなわけで (どんなわけで?),再度確認.その結果...
外部結合成功!! \(^o^)/
そうかぁ,そうだったのかぁ.
なんとですね,まじめに外部キー制約を付けたらうまくいきましたよ.
前々回のテーブルをちょっと変えて,
CREATE TABLE MAGAZINE ( ID INTEGER IDENTITY PRIMARY KEY, NAME VARCHAR, PUBLISHER VARCHAR ) CREATE TABLE MODEL ( ID INTEGER IDENTITY PRIMARY KEY, NAME VARCHAR, AGE INTEGER, MAGAZINE INTEGER NULL, FOREIGN KEY (MAGAZINE) REFERENCES MAGAZINE (ID) )
という感じにしました.MODEL の定義で外部キー制約を付けています (MODEL の MAGAZINE カラムに nullable を示す NULL を付けていますが,これはあってもなくても影響はありませんでした).
そうしたところ,次の問い合わせ
from study.Magazine magazine left outer join magazine.model model
その結果.
[CanCam(Shogakukan):[Yu Yamada(20), Yuri Ebihara(24), Asami Usuda(19)], Yuri Ebihara(24)] [CanCam(Shogakukan):[Yu Yamada(20), Yuri Ebihara(24), Asami Usuda(19)], Yu Yamada(20)] [CanCam(Shogakukan):[Yu Yamada(20), Yuri Ebihara(24), Asami Usuda(19)], Asami Usuda(19)] [JJ(Kobunsha):[], null] [ViVi(Kodansha):[Jun Hasegawa(18)], Jun Hasegawa(18)] [Ray(Shufunotomo):[Karina(20)], Karina(20)]
もう一つ,次の問い合わせ
from study.Magazine magazine left outer join magazine.model model where model is null
その結果.
[JJ(Kobunsha):[], null]
そんなわけで (どんなわけで?),どちらも意図した結果を得ることが出来ました.
手抜きしないできちんと外部キー制約を付けろということですか.残念!!!!
でも,ちょっと納得できないなぁ.外部キー制約があるかないかで,問い合わせ結果が変わるのはおかしいと思います.
外部キー制約って,INSERT や UPDATE の際に外部キーとして妥当でない値を許すか許さないかっていうだけのものだと思うのですが.
おいら,何か勘違いしてますか? 教えてエロい人!