Java⇔RDBのMapping-Frameworkを語るThre Vol.3
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG「Java⇔RDBのMapping-Frameworkを語るスレ Vol.2」
http://pc5.2ch.net/test/read.cgi/tech/1086315004/
「Java⇔RDBのMapping-Frameworkを語るスレ
ttp://pc5.2ch.net/test/read.cgi/tech/1049030272/
●まずは、基礎知識と技術選択指針など
[The Fundamentals of Mapping Objects to Relational Databases]
(RDBに対するオブジェクトマッピングの基礎(英語))
ttp://www.agiledata.org/essays/mappingObjects.html
[O/R-Mappingツールの比較サイト(英語)]
ttp://c2.com/cgi-bin/wiki?ObjectRelationalToolComparison
[Catalog of Patterns of Enterprise Application Architecture]
ttp://www.martinfowler.com/eaaCatalog/
詳細は、>>2以降に。
0357デフォルトの名無しさん
NGNGごちゃごちゃ言ってないで早く寝なさい!
0358デフォルトの名無しさん
NGNG0359デフォルトの名無しさん
NGNGSQL厨にマッチするのはiBatisでしょ。
0360デフォルトの名無しさん
NGNGさすがに無理がないかい?
テストのためにアーキテクチャをひずますのも本末転倒だし。
0361デフォルトの名無しさん
NGNGhsqldbのユーザーマニュアルの、SELECTの項を見る限りでは、使えるように思える。
FROM句の次に「sqlstatement」って書いてあるし。
0362352
NGNGそれが嫌だからO/Rマッピング使いたいんじゃん。
でも、O/RマッピングがSQLと比べてまだまだ貧弱だってこと。
>>360
そんな無理あるのかな?
現状は無理でも、DBへの依存を断ち切ることはO/Rマッピングの
究極の目標なんじゃないのかって思ってるんで。
開発環境のDBってゴミデータに埋もれがちで、動かないのが
データのせいなのか、プログラムのせいなのか解析するのに
手間がかかることよくあるし。
DBを扱う場合のUnit Testって、データまで含んで完結するしさ。
それに、複数環境で動かせられるってのが必須って要件は少ないと
思うけど、可能にできるならば品質の向上にも効果あると思う。
0363デフォルトの名無しさん
NGNGwhere句の条件式がコロコロ変わるようなのだと
キツいかと思った。
SELECT * from Employ WHERE name=? or tel=? or ・・・項目いっぱい
みたいので、telが存在しない場合は条件式に含めない、となると同じようなSQLをプロパティファイルに
いっぱい記述するかWHERE句だけ動的に生成するか。で動的に生成するとせっかくSQLを
外部ファイルに出している意味が激減。
iBatisなんかはどうなんでしょう。
0364デフォルトの名無しさん
NGNGDBのUnitテストはDBUnitを使えるときは使ってますが
362タンはどうしてます?
DELETE INSERT でテストデータを投入するのはUnitテスト的には
かくあるべきと思うのだけれどもテスト用スキーマを作らせてくれない
環境だと使えない。
0365デフォルトの名無しさん
NGNGttp://www.hibernate.org/30.html
Cayenne開発版は1.2 M1になってますね。
ttp://objectstyle.org/cayenne/release-notes/RELEASE-NOTES-1.2M1.txt
CayenneってV1.2でID列(自動インクリメントの列)をサポート
するみたい。リリースはまだまだ先でしょうけど。
0366デフォルトの名無しさん
NGNG> 現状は無理でも、DBへの依存を断ち切ることはO/Rマッピングの
> 究極の目標なんじゃないのかって思ってるんで。
現実的に無理だね。
DBに進化を止めてもらわないかぎりは。
構文的に問題なくても、DB機能の違いが多すぎる。
ORマッピングは、DBを考えなくてよくするしくみではなく、DBはDBで、JavaはJavaで考えれるようになるしくみだし。
良くも悪くも、単なるマッピングだよ。ラッパーじゃない。
それにここで問題にしてるのは、マッピング機能ではなくて、HQLの表現力という話だね。
環境依存SQLをラップする共通言語が欲しい、HQLにその役割をもって欲しいってことでしょ?
0367デフォルトの名無しさん
NGNGマッピングしてまえっ、って感じか。ORマッピングというよりは、Object-SQLマッピングという感じ?
0368デフォルトの名無しさん
NGNG> 現状は無理でも、DBへの依存を断ち切ることはO/Rマッピングの
> 究極の目標なんじゃないのかって思ってるんで。
DBに依存しないのに、何故OとRをマッピングする必要があるのかと。
素直にOODBを作ったほうがいいんじゃないかとさえ。
0369デフォルトの名無しさん
NGNGiBatisは動的なSQLが可能。
if これが0以上ならとか
0370デフォルトの名無しさん
NGNG俺もそう思う。オブジェクト指向かXMLでやるのが自然だな。
現在のO/Rマッピングはあくまでマッピングだから、RDBMSが持つようなスケジューリングの最適化機能なんてのは無い。
もしあったとしても特定のRDB製品限定にならざるおえないから、O/RマッピングツールのどのRDB製品でも同じようにっていう概念と相反してしまう。
0371352
NGNGDBUtilsはゴミだな。
名前付きパラメータすら使えないし、型マッピングが固定だし、
パラメータにnull渡せないし、コネクション引っ張りまわすか、
毎回DataSourceから取得する作りだし。
実際使ってる人がどうやってるか知らないけど、まともに
使えるようにするには相当被せなきゃだめっぽい。
>>364
DBだけってのはあきらめて、ロジック側でデータ足したり
しながらやってるよ。テスト終わったらRollbackして。
>>366
>それにここで問題にしてるのは、マッピング機能ではなくて、HQLの表現力という話だね。
>環境依存SQLをラップする共通言語が欲しい、HQLにその役割をもって欲しいってことでしょ?
話ずれたけど、主題としてはこれを言いたかった。
DBってあまりに標準ってものがなさ過ぎるから。
そのためのツールとして、現時点では理想と現実の折り合いで
一番センスいいな、と思ってるのがHibernateだから、
多くのDBで普通に書けるSQL程度はサポートして欲しい、と。
>>368,370
究極の目標って書いたのは、DBの持ってる機能は最大限利用しつつ、
それを意識せずに使えて、十分なパフォーマンスが得られるってことだよ。
その時にはO/Rマッピングとは呼ばなくなってるかもしれないけど。
ちょっと極論すぎてぼやけてきたんで、どうでもいいけど。。
0372デフォルトの名無しさん
NGNGでも、やっぱりリレーショナルモデルとオブジェクトモデルという異なったモデルを使う以上は、完全なラップは無理そうだ。
アプリケーションを高度に部品化すれば、DBを意識しなくてもよくなるだろうけど、そんときはORマッピングどころの話じゃないしね。
0373デフォルトの名無しさん
NGNG>>362じゃないけど、
環境標準のテストデータを整備して、
setUpメソッドで、自分のテストデータを投入して、
tearDownメソッドで、標準のテストデータを投入するのはどう?
あるいは、setUpメソッドで既存のDBデータを読み込んでIDataSetに格納して、
tearDownメソッドでDELETE_INSERTするとか。
(えらく時間がかかりそうだし制約とかがからむとヤバそうだが)
スレ違いかも・・・スマソ
0374デフォルトの名無しさん
NGNGhttp://opensource.atlassian.com/projects/xdoclet/browse/XDT-1161
解決法知ってる人いたらきぼんぬ。
top-down で開発するつもりだったけど、@hibernate 書いて xdoclet 動かして、
想定通りの hbm.xml が生成されてるか確認するぐらいなら、
最初から hbm.xml 書いた方が楽だと思った。middle-out で開発しようか思案中。
0375デフォルトの名無しさん
NGNGたぶん、それだとJavaコードの自動生成とかDBの自動生成で不満がでるんじゃないかと。
XDoclet使うのがいやなら、テーブルは別に作って、Javaコードとhbm.xmlを別々に書いたほうがいいと思う。
どちらにしてもテーブルは自力で作って、一発目のクラスとhbmはbottom-upで作った方がいいと思う。
あとは、XDocletを使ってJavaコードだけをいじるか、Javaコードとhbm.xmlを別々にいじるか、にしたほうがいいと思われ。
0376デフォルトの名無しさん
NGNGマニュアルとか見てみたけど、ORMの機能は
十分揃ってそうだし、GUIのマッピング
ツールもよさげ。値段、高いんかな。
http://www.oracle.com/technology/products/ias/toplink/
http://otn.oracle.co.jp/products/ias/toplink/
0377デフォルトの名無しさん
NGNGこれに入ってるらしい。
http://www.sourcenext.com/products/oracle_jd/
0378デフォルトの名無しさん
NGNG商用だけあって、GUIとかマニュアルとか
ちゃんとしているし。
RDBMSがOracleしか選択しないのであれば、
悪くない選択だと思います。
Oracle以外のRDBMSでも動くけど、
サポート面が恐いよな。
0379デフォルトの名無しさん
NGNGttp://objectstyle.org/cayenne/
ttp://www.theserverside.com/news/thread.tss?thread_id=30414
SQLTemplate (think iBatis inside an ORM, without XML in queries, editable via GUI), distributed caching, expression parser, inheritance mapping, professionally looking Modeler, etc.
SQLTemplateっていう新機能でiBatisのように、
任意のSQLが投げられる、しかもGuIで作業できるって事か?
0380デフォルトの名無しさん
NGNG0381352
NGNG@hibernate.collection-keyが抜けてるからじゃない?
ドキュメントだとcolumnが書けるように見えるけど、
xdt側では何も見てない。
@hibernate.set
lazy="true"
cascade="none"
name="CAPABILITY_ID"
@hibernate.collection-key
@hibernate.collection-key-column name="ENTITY_ID"
@hibernate.collection-key-column name="CAPACITY_ID"
@hibernate.collection-one-to-many
class="solutionCapability.VoiceCapability"
0382デフォルトの名無しさん
NGNG0383374
NGNG@hibernate.collection-key の column は省略不可って
書いてあるから、試してないけど、今度試してみます。
middle-out に移行したので、すぐには試せないけど…
つーか、buttom-up で @hibernatedoclet 吐いてるのって、
middlegen だったのね。@hibernatedoclet 付の .java に戻すには、
中→下→中→上 と生成しなきゃダメなのか…。
0385デフォルトの名無しさん
NGNGDB仕様書から吐くマクロ作っておけば無問題。
0386デフォルトの名無しさん
NGNG0387デフォルトの名無しさん
NGNGコメントなど日本語の部分が全部文字化けする・・・と思ったが
OSのデフォルトエンコードで出力されるんだね。(プロジェクトはUTF-8)
いまはGeneratorを書き換えてなんとか使ってますが、ファイルエンコードを外部から
指定する方法ってあります?
0388デフォルトの名無しさん
NGNGFK 制約とか cascade とかの、リレーション的機能はHibernateにおまかせ、
という開発スタイルはなんか問題ありますか?
0389デフォルトの名無しさん
NGNGどうなんだろ
別にいいといえば言いが
Hibernateとかのフレームワークって
トランザクションどうしてんの?
0390デフォルトの名無しさん
NGNG0391デフォルトの名無しさん
NGNGHibernateはほとんどの場合使い物にならない
0392デフォルトの名無しさん
NGNGどの辺で疲れたの?
0393デフォルトの名無しさん
NGNG実際のプロジェクトでDBが最初にかっちりと決まっているわけではなく
コロコロ変わったりすることもしばしば
そのような状況の中、コーディング作業も同時進行しちゃうから
そのたんびに設定ファイル書き直しとかいうのがイヤなのでは?
結局、自分のところ自分で修正するならSQL(JDBC)直で書いてあるソースのほうが直しやすい
0394デフォルトの名無しさん
NGNGそれって、それなりの規模があるなら、SQL直で書いてあるソースのほうがいやになりそうだが。
DBのコロコロ変わる変更が、フィールド追加くらいのものじゃなく、構成として変わるような起こるようなら、ORマッピングがどうのじゃなく、その組織自体に疲れたってことじゃない?
ORマッピング使わないにしても、愚直にJDBCプログラムするのは、ただ手間がかかるわけで、なにか仕組み使うだろ。
0395デフォルトの名無しさん
NGNG0396デフォルトの名無しさん
NGNG0397デフォルトの名無しさん
NGNGそれなら、Cayenneのが良さげ。
0398デフォルトの名無しさん
NGNGいろいろあるがこれが根本か、夢を見ていたおいらがあほだった。
あと、
Javaやって6年くらいになるが
・オブジェクト指向厨は運用や保守のことをまったく考えていない
・ソースを読まないオープンソース厨がおおい
・DBはJavaだけのものじゃない
でもiBatisは気になる。
0399デフォルトの名無しさん
NGNG相当レベルの低いところでやってたんだね。
うつってるよ。
0400デフォルトの名無しさん
NGNG気心知れた仲間内でサービスまでやるプロジェクト立ち上げ中。
おいらたちの合言葉
「仕事は適当に切り上げて、夢は家で見よう!」
60%くらいで働けばその辺のやつらの100%以上は十分働けるよ。
全開で頭使うのは会社以外で
0401デフォルトの名無しさん
NGNGデータのコピー処理作業がおそろしく無駄に覚えてきたStrutsで仕事な
今日この頃。
やっぱWebObjects + EOFみたいに、DBのモデルをそのままビューでも
使う、コントローラでも使う、モデルの変更は直接ビューに影響するって
のが楽でいいわ。
0402デフォルトの名無しさん
NGNG> オブジェクト指向厨は運用や保守のことをまったく考えていない
それは OO は関係なく、単に厨だからでは。
0403デフォルトの名無しさん
NGNG> ソースを読まないオープンソース厨がおおい
全体からみればオープンソースのソース読む方がむしろ奇特だと思われ。
0404デフォルトの名無しさん
NGNGBeanUtils使うだけじゃだめなん?
0405デフォルトの名無しさん
NGNGそうゆう輩がおおい。
たいてい、完全なマニュアルもサポートもないオープンソースを使うとき
ソースだけが頼り。
Hinernateのようにマニュアルがこれだけきちんとしているもののほうが珍しい
それでもソースは重要
OpenSourceってどういう意味や精神しってるかい?
昔はオープンソースプロダクトを使うとき必ずコンパイルしたものだ
0406デフォルトの名無しさん
NGNG今は今。
昔は、オープンソースは情報に敏感な一部の技術者が、趣味的にいじることが多かった。
今はオープンソース製品が広く認識されて、特に高いモチベーションを持つわけはない普通の技術者が業務としてオープンソース製品に触れるわけだ。
今はオープンソースと言っても、原理主義的オープンソースから、単にソースが公開されているだけのオープンソースまで、人々の認識は多種多用だし。
0407デフォルトの名無しさん
NGNG政治的思想を広めるという使命を背負ったオープンソース。
同好会的な内輪ノリのオープンソース。
人生色々、オープンソースも色々。
0408デフォルトの名無しさん
NGNG>OpenSourceってどういう意味や精神しってるかい?
マニュアルを販売して、大儲け。
0409デフォルトの名無しさん
NGNGちがうよ、ちょっとした付加機能追加して、有償販売して大もうけ。
0410デフォルトの名無しさん
NGNG0411デフォルトの名無しさん
NGNG0412デフォルトの名無しさん
NGNGウィルス埋め込まれてたらやだけどね。
0413デフォルトの名無しさん
NGNG上下の口もクローズド
入れさせません
0414デフォルトの名無しさん
NGNG問題がおきたとき情報集めてソース読んで対処するのはいつもおいら。
疲れたな
0415デフォルトの名無しさん
NGNGビューは使えなくなるね。
0416デフォルトの名無しさん
NGNG0417デフォルトの名無しさん
NGNG0418デフォルトの名無しさん
NGNG問題が過ぎ去った後
自分の努力を誰も理解してくれない寂しい状況になる
0419デフォルトの名無しさん
NGNG0420デフォルトの名無しさん
NGNG0421デフォルトの名無しさん
NGNG詳細ドキュメントの修正を依頼されたクリスマス
0422デフォルトの名無しさん
NGNGところで、ビューってORMと共存しにくくなかった?
0423デフォルトの名無しさん
NGNG0424デフォルトの名無しさん
NGNG0425デフォルトの名無しさん
NGNG0426デフォルトの名無しさん
NGNG0427デフォルトの名無しさん
NGNG問題なくORでいけるんじゃないか?
0428デフォルトの名無しさん
NGNG>>415
0429デフォルトの名無しさん
NGNGで、結局でかいプロジェクトになるとパフォーマンスでないから
夢見るきれいな形にはなってくれない
0430デフォルトの名無しさん
NGNGヨヨ「オレルスの仲間達!みなさんもちからを!」
「私に力を!強さをください!」
ヨヨ「ビュー……あなたも……お願い……」
「私、ビューには嫌われてる……」
「私がいることで、ビューをいやな気分にさせてしまう……」
「それは分かってるの……」
「でも……ビュー」
「貴方はやっぱりわたしの大切な人なの」
ヨヨ「いまだけでもいいの……わたしに……強さを!」
「あの頃のように!」
ヨヨ「ねえ、ビュー……もっとつよく、つかまってもいい?」
ビュー「……」
ヨヨ「もう……つかまっちゃった……」
0431デフォルトの名無しさん
NGNGちげーよ。きちんとした分析もせずに画面のデータが保存できりゃ
それでよしみたいな腐った非正規化された設計になってるからだろ。
どっかのSヨがExcelで作ったゴミDBを何度見たことか・・・。
非正規化すると、重複データをメンテナンスする必要性が出てきたり、
結局はマスタチェックしなきゃいけなかったりでデメリットも相当多い。
正確に分析してあるべき姿を論理設計
↓
パフォーマンスや簡略化のために非正規化
ちゃんとやってるプロジェクトってどれくらいあるの?
脳内で適切に非正規化できる奴は滅多にいない。
0432デフォルトの名無しさん
NGNG0433デフォルトの名無しさん
NGNG0434デフォルトの名無しさん
NGNG0435デフォルトの名無しさん
NGNG0436デフォルトの名無しさん
NGNGそれでいて残業はしっかりしていくんだよな。
0437デフォルトの名無しさん
NGNG↓
パフォーマンスや簡略化のために非正規化
確かにこれはわかるが
この変遷についていけるマッピングFWがあるのか・・・
0438デフォルトの名無しさん
NGNGその変遷どおりにマッピング変えればいいだけだよ。
ORMに幻想抱きすぎ。
SQLを変更するのと、どっちが手間がかかるか、安全か、天秤にかけて、適切な方を選べばいい。
0439431
NGNGそうでもないと思うよ。非正規化が絶対に必要なのは一般に思われてるほど
多くないと思ってるから、むしろORMの機能をフルに使う事を前提にして
設計した方が綺麗に無駄なく作れるような気がする。
ERD上の関係より、コレクションの関係の方が詳細に限定されてるし。
あるべき姿の論理設計って、実際はかなり大雑把なもので、最低限必要な
属性しか持っていない概念的なテーブル構成にして、極端に詳細な要件は
省いて設計して、物理設計の時点で反映させるくらいでいいのかも。
パフォーマンスの点だと、単に結合するテーブルを減らす目的の非正規化って
無駄(マスタとの結合)を減らす程度の効果しかなくて、日次や月次バッチなりで
集計結果を先に計算して誤魔化す方が劇的な速度向上が得られると思う。
それには非リアルタイムになるってデメリットも出てくるけど。
チューニングって言っても、結局、「誤魔化す>>>無駄を減らす」なわけで。
0440デフォルトの名無しさん
NGNG0441デフォルトの名無しさん
NGNG0442デフォルトの名無しさん
NGNGマジレスすると、そいつらには
「『正規化』という概念そのものが無い」
のですよ。
もちろん、オブジェクト指向とか、RDBとか、
そーゆー概念も無い。
【大型汎用機】とか【コピー句】とか、
そういった世界の人々が、ORマッピングの世界に流れてきて
カオスを生み出しているのが現状。
0443デフォルトの名無しさん
NGNGどんどんシンプル化されて、
[RDBMS] ⇔ [必要なSQL投げ投げロジック。SQLは手書き] ⇔ [オブジェクト]
に収束する希ガス。。。
0444431
NGNGそれは受付キュー ⇒ 揃ったところで定時処理みたいな奴でしょ?
最初から処理可能時間が限定されてるようなのはまた別の話。
ただね、何でもかんでもバッチでって発想の奴多いからさ。
一度その前の綺麗な姿で設計すべきだろって言いたいんだよ。
パフォーマンスに関してのチューニングだと、
1) 無駄を減らす ⇒ インデックスの有効利用やプロシージャ化など
2) 誤魔化し ⇒ 時間かかる計算を先にして計算結果のみ利用など
この2種類のどっちかになると思ってるんだけど、どうよ?
>>443
現状でORMだけで完結できないのは同意。EJBQLもHQLも
貧弱だし、そのへんも結局SQLのラッピングだし。
0445デフォルトの名無しさん
NGNG要件定義の段階で業務のすべてを吸い出すことは出来ない
ようやく決まったと思ったら、他の担当の奴(顧客側)が突然首突っ込んできて
「ああ、それは違うよ 今はそう言うやり方ではない」と、打ち合わせている業務担当者でさえ知らない新事実が発覚する
ほんと糞プロジェクトだよ
0446デフォルトの名無しさん
NGNG> 2) 誤魔化し ⇒ 時間かかる計算を先にして計算結果のみ利用など
こういうのを「誤魔化し」というのは、処理の時間方向での分散という考え方がしっかりできてないという証拠だと思ってしまうんだけど・・・
0447デフォルトの名無しさん
NGNG0448431
NGNGふーん。
じゃあ、事前集計の結果と、リアルタイム集計が同一だというの?
要件的に同一とみなして構わないってだけの話だと思うんだが。
近似値しか得られないのであれば、データ的に誤魔化してるじゃん。
0449デフォルトの名無しさん
NGNG近似値を得ることを誤魔化しというのも、数とか計算についての考え方がしっかりできてない証拠だと思ってしまうんだけど・・・
0450デフォルトの名無しさん
NGNG0451デフォルトの名無しさん
NGNGいくらでも同一にできると思うのだが。
0452デフォルトの名無しさん
NGNG事前集計の結果を上書きするようにします。
というような改竄系の仕様の乱発を求める顧客の要望には
正直ついていけないというか罪の意識さえ感じてたりします。
0453デフォルトの名無しさん
NGNGなしで何をやれと。
0454デフォルトの名無しさん
NGNG0455デフォルトの名無しさん
NGNGそこでiBATISですよ。
>>445
そこでアジャイルですよ。
ttp://capsctrl.que.jp/kdmsnr/wiki/bliki/?ScopeLimbering
ttp://capsctrl.que.jp/kdmsnr/wiki/bliki/?FixedScopeMirage
0456デフォルトの名無しさん
NGNG■ このスレッドは過去ログ倉庫に格納されています