DBクエストIII〜そして伝説(ORマッピング)へ〜後編


あらすじ
じぶんの にくたいの きほんを みなおした
ゆうしゃ じゅいち だったが JPAのドリルを
つかえない りゆうは わからなかった


イムリミットが せまる なか
ゆうしゃは JPAのドリルを あきらめ
ハイバーネイトの スコップで DBの
どうくつを ほる かくごを きめた


ゆうしゃ じゅいちの ぼうけんは つづく・・・



 いや、ホントに半分は覚悟したわ。マジでハイバーネートのアホみたいな二度手間ファイル作成を手動でするハメになるんかぃ・・・orz、って。


 先に結果を言うと、問題は解決した。NetBeansで実行して作成・挿入したデータをデータベースに直接アクセスして読むことが出来るようになったのだ。


 解決の流れはこうだ。


 まず、NetBeansで作成・アクセスしているデータベースはNetBeans内部でのみ利用可能な仮想DBなのではないか?と疑ったのが出発点。
 しかし、NetBeans外部でH2データベースを起動しないとNetBeansでの実行が出来ないことからそれはないと分かる。データだけ別のところで管理している可能性はまだ残るが、どちらにせよH2データベースの別のフォルダーに有って見えないようなものであると言えるだろう。
 ではなぜ見えないのか?
 ユーザー名は"su"で同一、スキーマ(通常は意識されないが、同一ユーザーがスキーマ毎に同名の別のテーブルを持つことが出来る。)も"INFOMATION_SCHEMA"で同一、もちろんテーブル名(ここではTEST)も同じだ。
 ・・・優秀な技術者である読者諸君なら既に気づいているだろう。そう、データベース名が違ったのだ。だがこの時点ではまだ俺はそのことに気づいていない。なぜならH2データベースのデフォルトのデータベース名も「TEST」だからだ。
 ここには3つの罠があった。

  1. デフォルトデータベース名と、H2のWEBコンソールに入った時に示されている「SQLステートメントのサンプル」が作るテーブル名に同じ"TEST"が使われてる→データベースとテーブルを同一視する混乱が生じる。
  2. H2のWEBコンソールを初めて表示したときに示されるデフォルトのJDBCのURLは"jdbc:h2:~/test"となる。一方http://journal.mycom.co.jp/special/2006/jpa/003.htmlの記事では「デフォルトではJDBC URLが「jdbc:h2:test」、」とウソが書かれており、どうやらそこに書かれているpersistence.xmlの例のデータベースURL"jdbc:h2:tcp://localhost/test"は「jdbc:h2:test」に対応した記述である。→本来testデータベースにはJDBCのURL"jdbc:h2:test"でアクセスするべきだが、記事の言うとおりにデフォルトの(="jdbc:h2:~/test"の)まま~/testというデータベースにアクセスしてしまう。→見つからない。
  3. H2は存在しないデータベース名でアクセスしようとすると自動的にデータベースが生成する→データベース名が間違っていてもエラーが出ない→間違いに気づかない。



 つまりH2のWEBコンソールで見たときは”test”データベースではなく、ずっと”~/test”データベースを見ていたためにNetBeansの実行結果が見えなかったのだ。


 データベース名が違うのでは?と気が付いたのは試しにWEBコンソールの入口でJDBCのURLを"jdbc:h2://lokalhost/test"とした時だった。これでもデータベースに入れたのだが、後になって
「ん?lo”k”alhost?」
そう、kとcを書き間違えたことに気づいたのだ。こんな致命的なミスなのに通ってしまうとはこれいかに!?と思って上記のようにネットの記事を読み返してJDBCのURLの記述を読んで違和感を感じたのだ。(デフォルトのURLこんなだったっけ?と。)しかし記事どおり打ち込むと今までNetBeansで作ってきた表と御対面!
 そしてH2のDocumentationを調べてみると「初期設定では、データベースの指定されたURLがまだ存在しない場合、自動的に新しい (空の) データベースが作られます。」とあるじゃぁねぇかーーー!そこで念のため別のPCにH2をインストールしてデフォルトのJDBCのURLを"jdbc:h2:~/test"と確認して事の次第を知ったというわけだ。


 えーっとこの記事(2006/11/30)書いたのは・・・杉山貴章さん?


寝ボケんなッ!


貴様のせいで半月潰れたわッ!!


どうしてくれるんじゃ


このうっかり八兵衛がぁ!!


俺の怒り度は


月の質量の半分だコラァ!!!




 いや、確かにね、”デフォルト”って言葉をウのみにしないで、ちゃんと文面を読んでれば、あ誤字だ、ってすぐ分かったんだろうけどね・・・でも・・・でもね!これって俺のミス?俺のミスなの?だとしたらこの怒りは何?つーかなんでこの記事一年も間違ったまま放置されてるの?だれも気づかないの?気づいても「こんな初心者向けで無料のソース、ちょっとぐらい間違ってても書き直す手間の人件費の方が高いから、放置でおk!」とか考えてるのか!?


(#ノ ゚Д゚)ノ ==== ┻━━┻


ザケンナー

 ま、からだの きほんは わるくなかったが
JPAドリルの H2というパーツの きほんが
おかしかった という ことだな





DBクエストIII〜そして伝説(ORマッピング)へ〜


━━━THE_END━━━