トップページtech
983コメント363KB

Java⇔RDBのMapping-Frameworkを語るスレ

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
●各種Framework
[Torque]
http://db.apache.org/torque/
http://homepage1.nifty.com/kingyoshi/computer/jakarta/torque.htm

[HYBERNATE]
http://hibernate.bluemars.net/1.html

[CasterJDO]
http://www.castor.org/jdo.html
http://www-6.ibm.com/jp/developerworks/java/021025/j_j-castor.html

[ObJectRelationalBridge (OJB)]
http://www.terra-intl.com/jakarta/ojb/

●コネクション・プーリング
[Jakarta Commons DBCP]
http://jakarta.apache.org/commons/dbcp/
(Jakarta Commons DBCPを使ってみよう。)
http://taka-2.com/jclass/DBCP/
(DBCP利用法 from "『カモン!Commons!』 Jakarta Commonsを使ってスキルアップ" (2002/09))
http://www.mobster.jp/wiki/index.jsp?pid=Commons#i10
0552デフォルトの名無しさんNGNG
>>551
マジで!?
0553デフォルトの名無しさんNGNG
ああ、setupコマンド打てばいいのか・・・
0554デフォルトの名無しさんNGNG
軽く保守
0555デフォルトの名無しさんNGNG
age
0556デフォルトの名無しさんNGNG
Hosh
0557デフォルトの名無しさんNGNG
重く保守
0558デフォルトの名無しさんNGNG
ネタ無いねー
0559デフォルトの名無しさんNGNG
Hibernate joins JBoss
http://hibernate.bluemars.net/136.html
0560デフォルトの名無しさんNGNG
>559
これって喜んでいいの?
悲しんだらいいの?
JBossは使ってなくて、Hibernateは使ってるんだけど。
0561デフォルトの名無しさんNGNG
ここまでの俺流あらすじ(Javaの知識は基本以外はないので客観的に見れてるはず)

各フレームワーク

俺様フレームワークはオナニーだな。一生てめえが面倒見ろよ
Torqueはださい、つかいづらい。でも流行ってるからつかおうぜ
HibernateはJDOだから将来性あり。でもそれなりに癖あるぜ
その他 なんかよくわかんなーい。でもそんなマイナーなものつかわんでいいじゃん

設計とか

Viewで外部結合はなんとしろ。じゃないとほとんどのフレームワークむりぽ
OOとRDBは相容れないもんだから、頑固にOOは頭硬いYO
SQLをソースに埋め込む埋め込まないは個人の経験によりけり
チームメンバーは自分と同スキルでないのでそこんとこよろしく

総評

この先JDOが主流になる予感。癖のあるフレームワークでガチガチになるなよ

個人的な意見

全然わかんないんだけどSunJDOがそのうちSDKに組み込まれんじゃないの?
だったらそれに準拠してるの使うかそれまではJDBCをちょろっとラッピングしてればいいのでは?
デザインパターンとかでそういうのあればいいすねぇ

保守age
0562デフォルトの名無しさんNGNG
>>561
HibernateはJDOの実装ではないと思うのだが

あと、JDO1.0はORMとしてはかなり萎える面が多いと思うのだが気のせいだろうか?
ORMだったら当り前っぽい機能でも「実装依存」扱いになっているものが多くないか?
JDO2.0でそこら辺もうちょっと考えてくれる方向性っぽいのでそれには期待してたいと
思っているけど
0563デフォルトの名無しさんNGNG
Hibernateも(ついでに)CastorもSunのJDOとは無関係ですね。


0564デフォルトの名無しさんNGNG
いまさらなんですが>>405の理由を教えてください
0565デフォルトの名無しさんNGNG
WebObjectsのEOFさわらないで、O-Rマッピングを語るとは笑止千万。

#いや、マジでさわってみてって。業務で使わないにせよ。
0566デフォルトの名無しさんNGNG
>>565
WebObjectsって工数は削減できそうなんだけど、例えば結果に
含まれる行が大量になるデータの扱いとかが苦手という話なので
使う気にならん。性能的にどうなの?

WebObjectsって、ページデザインをデザイナーが担当するような案件の
場合にすごい作業しにくそうなんだけど、EOF部分だけをStrutsや
Tapestryなどのフレームワークと組み合わせて使えます?
0567デフォルトの名無しさんNGNG
>>566
あー、大量データはきついかもねぇ。
EOFといっても所詮はキャッシュだからねぇ。

> EOF部分だけをStrutsやTapestryなどのフレームワークと組み合わせて使えます?
PureJavaだから、使えると思うよ。やったことないけど。
でも、WOF(WOで使うWeb周りのフレームワーク)を使わないように気をつけないとね。
でも、すみません、Tapestryはしらない。WOの影響を受けてつくったらしいとかいううわさは聞くけど。
0568リカバリNGNG
どなたかデータリカバリの良いソフトをご存じないですか?
デジカメで撮った写真、動画のデータ及びexcel等の重要なデータを誤って消してしまったのです。
出来ればフリーソフトであるといいのだけれど・・・
0569566NGNG
>>567
回答サンクス。
まあ、EOFだけ抜き出して使うなんてキチガイじみたことは
やらないと思うけど、機会があったらWebObjectsもやってみたいねえ。
0570デフォルトの名無しさんNGNG
Torqueなんですが、autoincrementなどでIDの自動生成をするテーブルが
あったとして、INSERTしたと同時にその自動付加されたidの取得ってどうすれば
よいでしょうか?
ご教授お願いいたしまそ。
0571デフォルトの名無しさんNGNG
>>570
もうtorqueは使わなくなったので間違ってるかもしれんけど、
dataObject.save();
Integer id = (Integer)dataObject.getPrimaryKey();
みたいな感じでどう?
0572デフォルトの名無しさんNGNG
>>571
さんくす!一度やってみます^^
0573デフォルトの名無しさんNGNG
HoshAge
0574デフォルトの名無しさんNGNG
>>573
このスレ上げる意味って何よ。
DB板も悲惨じゃない。
0575デフォルトの名無しさんNGNG
アオリニマジレスカコワルイ
モレモナー
0576デフォルトの名無しさんNGNG
みんな!
Torqueかけて行くぞ!
0577デフォルトの名無しさんNGNG
WebObjectはパッケージングがしにくいな。
俺の技術のせいかもしれないけど。
0578デフォルトの名無しさんNGNG
Torque提案したら却下されたよぉ・・・・(/Д`)・゜・
なんで自前で作らなきゃいけないんだよぉ・・・
途中から訳ワカメ状態に陥ってただのDBアクセッサになりつつある罠。

漏前ら自前で作った(事がある人で)RDBフレームワーク or アクセッサ設計晒してもらえます?
自分は個人的にC++のDBTools好きだったんで、それに近い感じで作ってます。
0579デフォルトの名無しさんNGNG
>>578

必要なときにデータをとってきて必要なときにインスタンスを作る。それ以外方針なんてありようがない。設計ったってそのときどきによるよ。
0580デフォルトの名無しさんNGNG
>>578
却下された理由って何よ。
他のフレームワークは提案したのか?
0581デフォルトの名無しさんNGNG
>>578
Torque はWHERE句の条件の順序を指定できないぞ。
INDEX利かんぞ。それでもいいのか?
0582デフォルトの名無しさんNGNG
>>581
INDEX利かない?
0583デフォルトの名無しさんNGNG
索引使わんのか。しょぼすぎる
0584デフォルトの名無しさんNGNG
>>581
from句じゃなくてwhere句の記述順序を特定できないと
困るDBMSってなんだっけ?
0585デフォルトの名無しさんNGNG
>>584
ふつうWhere句は後ろから評価するじゃない。
だから効率いい評価を逆順で書くけど、そりができないってことでしょ
0586デフォルトの名無しさんNGNG
>585
普通のDBMSは後ろから評価するものなんですか?
OracleもDB2もSQLServerもPostgreSQLもMySQLも、みんなそうですか?
0587デフォルトの名無しさんNGNG
>>586
ネタに釣られるなよ。
そんなことはない。
今時のRDBMSはけっこう賢い。
0588デフォルトの名無しさんNGNG
>>587
まじですか?結構意識して書いてたのに
oracleだと私が使ったことあるのは8.0.6〜8.1.7なんだけど、いつぐらいからそうだったんですかね?
0589デフォルトの名無しさんNGNG
あるテーブルの複数のフィールドに条件指定する場合、選択性の
高い(=falseになりやすい)フィールド条件が先に評価されるよう記述
した方が効率が良いということかな?
実行計画の決定に比べたら屁みたいなもんなんで、気にしたことが
なかった。
0590デフォルトの名無しさんNGNG
>>589
DBMSによるけどじゅうようだよ。
データによって偏りがある場合、それで最初に絞ったほうが早いかどうかって。
最初に評価されるはずの条件でデータが一気に絞れたり、それにたいしてINDEXを使えるかとか。
0591デフォルトの名無しさんNGNG
>>590
インデクスが使えるかどうかってのはたしかにすごく重要だ。

けど、それがwhere句の記述順序で決まるようなアホなDBMSは
いまどき存在しないだろう。
sequencial scan で選択条件が複数ある場合にちょっと効くかな?
という程度じゃないか?
0592デフォルトの名無しさんNGNG
「Patterns of Enterprise Application Architecture」
http://www.amazon.co.jp/exec/obidos/ASIN/0321127420/qid=1066816704/sr=1-2/ref=sr_1_18_2/249-7197900-6499567

↑読んだ人いませんか?非常に気になっています。

データベースマッピングについての記述はどのようなものでしょうか?
SQL文を直接書くことを前提にした設計でしょうか?
それとも、TorqueやBC4Jなどのフレームワークを使用した設計のパターンでしょうか?

私は接続に関するオブジェクトをクラス間で渡し合い、
しっくりこない設計をしているのですがきれいなパターンを知りたいと思っています。
0593デフォルトの名無しさんNGNG
>>592
よみました。

2/3くらいがORマッピングの話だったかと。

紹介されているパターンについては著者のサイトを参照してください。
http://www.martinfowler.com/eaaCatalog/
SQLを直接書くパターンから抽象的なマッピングフレームワークのパターンまで
いろいろとりそろっています。

torque, bc4jなどの特定のフレームワークを利用した解説はされていません。
どちらかというと、そういったフレームワークをつくるときに問題となる事項や
利用できるデザインパターンについての解説って感じです。

接続に関するオブジェクト云々に関しては、
今ホットな話題のIoCなコンテナである
Spring Frameworkとかを調べてみるのもいいんではないでしょうか。
0594593NGNG
>>593
レスありがとうございます。

> torque, bc4jなどの特定のフレームワークを利用した解説はされていません。
> どちらかというと、そういったフレームワークをつくるときに問題となる事項や
> 利用できるデザインパターンについての解説って感じです。
そうなんですか。
よくわかりました。私は一からそのようなフレームワークを作る気はなく
既存のものを利用したいので、この本はあまりやくだたないでしょうか?
あるいは、フレームワークを深く理解するためにもそれなりに有益でしょうか?

>
> 接続に関するオブジェクト云々に関しては、
> 今ホットな話題のIoCなコンテナである
> Spring Frameworkとかを調べてみるのもいいんではないでしょうか。
IoCもSpring Frameworkもしりませんでした。調べてみます。

どうもありがとう。
0595デフォルトの名無しさんNGNG
>>591
Oracleはそうなわけだが。。
0596デフォルトの名無しさんNGNG
>>595
んなアホな。PostgreSQLだってもっとマシなプランナ持ってるよ。

記述順序が効くとすれば、どの条件でもインデクスが使われないか、
CBOを使っていてかつどの条件でもインデクスが使える場合だろう。
0597デフォルトの名無しさんNGNG
>>596
設計思想が違うだろうから単純比較はできないんじゃない?

漏れの記憶ではOracle8iとかではWHERE句に書く順序は気にしてたはず。
オプティマイザがルールベースだったかコストベースだったかは覚えてないけど。
0598596NGNG
>>596
間違えた。CBOじゃなくてRBO。

>>597
少なくともRBOの場合、インデクスが使える条件は使えない条件より
優先されるから、そんなことはないはず。記述順序で決まるとすれば、
どちらもコスト的に等価とみなされた場合だけ。
逆にそれらがみんな記述順序で決まるとすれば、オプティマイザの
仕事がなくなってしまうし。
0599597NGNG
>>598
ああ、ごめん。漏れの記憶の話はインデクスを使う話とはぜんぜん関係ない話だった。
逝ってくる。
0600デフォルトの名無しさんNGNG
RDBではテーブルとテーブルを結合するにはキーとなる情報が必要だが、
OOでは普通クラス間の関連で表現するよな。

一方のクラスが片一のクラスのインスタンスを包含する場合、
このスレで取り上げられたJDOやらなんちゃらのFrameWorkでは、
どうやってそれを実現してるんだろう?
(オブジェクトのシリアル値をテーブルに含めるとか?)

0601デフォルトの名無しさんNGNG
age
0602デフォルトの名無しさんNGNG
「WebObjectsのEOF使いたいけど、Appleはなぁ・・・」と思ってるヤシ
Cayenneを使ってみれ
http://objectstyle.org/cayenne/
0603デフォルトの名無しさんNGNG
>>602
興味あるなー。詳しく説明して。
Tapestryと組み合わせたらWOもどきの出来上がり?
0604デフォルトの名無しさんNGNG
>>602
この手のツールを使ったことが無かったんだが興味があったんで落としてみたが、
結構便利そうね。DBMSのスキーマ情報のリバースとか、DAO層のJavaクラスを
自動生成してくれたりとか、リレーションをリバース時にも自動で解決して
くれたりとか。欲しい機能は揃ってる感じ。
ちょっと気になったのが、PKのGenerationまわり。
従業員番号やISBNみたいに、エンティティとして意味のある値がPKでない
場合、DBMSの機能で自動生成させることが実際には多いと思うのだが、
その方法ってモロにDBMS依存だよな。Oracleのシークエンスには対応
してくれてるみたいなんだけど、MSSQLのIDENTITY列には対応できなさそうな
気が。PKの値が与えられていない場合は自分で値を捏造しちゃおうと
するみたいだしな。
この辺、別にCayenneに限らない問題と思うのだが、一般的にはどう
解決されてるのかしら。そういうDB設計は、避ける?
0605デフォルトの名無しさん NGNG
>>604
JDOも2.0からはPK生成を対応するみたいです。
実装方式に関しては、不明ですが。
0606604NGNG
>>605
CayenneでのGenericなPK生成の方式は、テーブルにシード値を格納しておいて、
それをインクリメントしながら生成するという単純な遣り方。
後は個別のDBMS向けに、もっとマシな実装が用意されている場合もある。
ま、この方式にしろ、行ロックは必須だし、DBMS依存性はやはり残る。

柔軟性という意味では、アプリケーションレベルではDBMS毎のアダプタ実装を
プラグインできるのだが、本来はもう少し細かくテーブル単位でカスタマイズ
したいところだ。Oracleのシークエンスにのみ、個々のテーブル単位での
カスタマイズに対応しているようなんだけれども。
0607デフォルトの名無しさんNGNG
>>604
例えばTorqueだとID用テーブルを作ってそこでSEQUENCEのようなことをする(こともできる)。
606と同じだね。
MySQLの場合の例
CREATE TABLE ID_TABLE
(
ID_TABLE_ID INTEGER NOT NULL,
TABLE_NAME VARCHAR (255) NOT NULL,
NEXT_ID INTEGER,
QUANTITY INTEGER,
PRIMARY KEY(ID_TABLE_ID),
UNIQUE (TABLE_NAME)
);
で、これを管理するためのクラスもある。

多分他も同じようなものじゃないかな。
自分で作るとしてもこうするし。
0608デフォルトの名無しさんNGNG
Torqueで質問です。
ランタイムのコード(Peer)を読んでたら、doUpdateとかで最後にTransaction.commit()
みたいになってたんですけど、これって、オプションかなんかではずせますか?
複数テーブルの更新でまとめてコミットするような処理って無問題?
0609デフォルトの名無しさんNGNG
WebObjectsのEOF ってwindowsで評価版とかありますか?
MacOSXとSolarisだけしか使えないのかなー。
0610デフォルトの名無しさんNGNG
いっそ富豪的にPrevayler使うってのはどうよ(w
0611デフォルトの名無しさんNGNG
>>608
doUpdate(criteria, connection)の方を使って、connectionのautoCommitを
falseにしておけばできると思います。
0612デフォルトの名無しさんNGNG
このスレであっているかどうかわからないけど、詳しそうな人が一杯いると思うので
質問です。

Oracle の JDBC ドライバは、OCI(type2)と thin(type4)の両方がありますが、
Oracle 以外で type2 ドライバってあるの?

postgresql.jar とか MySQL 用って、みんな type4 だよね?
これらふたつや DB2 用のドライバに、type2 ってあるのですか?
0613デフォルトの名無しさんNGNG
>>612
DB2にはあるぞ。

↓ちょっと古いけど・・・
www-6.ibm.com/jp/software/data/developer/library/techdoc/javappli.html
0614デフォルトの名無しさんNGNG
つーか、このスレで間違っているのでは?
0615デフォルトの名無しさんNGNG
OR Mapping と言えるかどうかわからないけど、Jakartaでこんなものがリリースされたみたい。

Jakarta Commons-DbUtils
http://jakarta.apache.org/site/news.html#20031111.1
http://jakarta.apache.org/commons/dbutils/

DbUtils is a small set of classes designed to make working with JDBC easier.
ということらしいので、本格的な、大規模のアプリケーション等で DB アクセスをラッピングする
フレームワークというよりは、
JDBCプログラミングを生でする代わりに少し楽をする、という目的なのかな。

サンプルをみてみたが、あまりイケてる実装には思えなかったが...
クラスもまだ 17コしかない。

とりあえずご参考までに。
0616デフォルトの名無しさんNGNG
>>615
これ新しいの?
この前たまたま見かけて、オレもサンプル読んだ程度だけど、
ちょっと変わってて面白いと思った。
0617デフォルトの名無しさんNGNG
>>616
変わっているというか、誰でもやってることをCommonsプロジェクトが
やってくれた、という感じ。
いつも、みんなやっているよね。
毎回毎回作っているよね。
それなら、ライブラリ化しよう!
いつでもどこでもみんな同じモノを使えるよ!
ってとこかな。
0618デフォルトの名無しさんNGNG
WEB+DBに載ってたseasarってあp鯖の
SqletってORマッピングが結構気に入った.
SQL書くのが気にならないなら便利かも,
0619615NGNG
>>616
> これ新しいの?
たまたま jakarta のサイトを見ていたら、1.0 release と出ていたから、新しいものなのかと思った。
えらそうなことを 615 で書きましたが、今回はじめて知りました。
beta のころからずっと知られていたものなのだったらすみません。
ちなみに 11/10 付けのリリースだそうです。
0620615NGNG
さらに間違ってしまいました。
誤:11/10
正:11/11
0621デフォルトの名無しさんNGNG
Torqueでcount(*)ってどうやってとったらいいの?
全件ならリストサイズなんだけど、GROUP BYかけてグループごとの件数を知りたい場合の話ね。
やっぱりループでぐるぐるカウントするしかないの?
0622デフォルトの名無しさんNGNG
spring frameworkの話題はもうないの?
0623デフォルトの名無しさんNGNG
621>>
criteria.addSelectColumn( "count(*)" );
Record result = (Record) HogehogePeer.doSelectVillageRecords(criteria).get(0);
int count = result.getValue(1).asInt();
0624デフォルトの名無しさんNGNG
おお!
Village使うのか。このあたりよく知らなかったよ。
ありがとう。
いい人だ>>623
0625デフォルトの名無しさんNGNG
Hibernate 2.1 が出たよ
0626デフォルトの名無しさんNGNG
>>625
- native SQL queries
- full Criteria query API, with support for associations
- integration of OSCache, SwarmCache, JBoss TreeCache, as well as EHCache.
- more "cool" features.

普通のSQLも書けるようになったみたいね
0627デフォルトの名無しさんNGNG
Hibernateで「表」っていう漢字で終了する文字列がDB追加できないんですが・・・
0628デフォルトの名無しさんNGNG
『表』問題なんて、プログラマーなら誰でも知ってるだろ…
Hibernateは関係ないぞ。
0629デフォルトの名無しさんNGNG
>>628
\が入ることしかしらん。
なんでHibernateが関係ないとなるのか、わからん。
0630デフォルトの名無しさんNGNG
>>629
関係ないの表現のとり方を間違っている。
628のいいたい関係ないは、固有の問題じゃないということ。
0631デフォルトの名無しさんNGNG
Hibernate使ってても使って無くても、そういう文字は
エスケープするよねということですよ。はい。
0632デフォルトの名無しさんNGNG
>>631
ようするに、Hibernateは自動で対処してくれないということだな
0633デフォルトの名無しさんNGNG
627です。
無知でした・・・
どうもありがとう。
0634デフォルトの名無しさんNGNG
>>632
開発チームにそういう要望を誰もコミットしてないからだろ。
頼まれてもいない全言語ですべての文字が文字化けしないか誰が試すんだよ。
0635デフォルトの名無しさんNGNG
>>634
普通に\入れたときはどうなるの?
0636デフォルトの名無しさんNGNG
>>635
当たり前だけど普通にJavaで\使ったときと同じ。
0637デフォルトの名無しさんNGNG
>>636
普通にJavaで\使ったときとは?
文脈からいえば
 PreparedStatement#setString
のとき?
0638デフォルトの名無しさんNGNG
"\"hoge\""

"価格は\\4,000"

みたいな感じだろ。
0639デフォルトの名無しさんNGNG
それじゃ"表示"が文字化けすることにはつながらんね。
0640デフォルトの名無しさんNGNG
>>639

>>635>>636>>637>>638

どこに”表示”に関しての話が出ておる?
0641デフォルトの名無しさんNGNG
>>640

>>627
表示じゃなくて表でおわるだったけど。
0642デフォルトの名無しさんNGNG
>>641
表示に関してでも表で終わる文字でもなく、\という文字を普通に
Hibernateに渡したらどうなるかと言う質問以外には読み取れないのだが、どうよ?
0643デフォルトの名無しさんNGNG
>>640
本題はそこじゃなかったことに気づけ。
も少し前から話が始まってるだろ。
0644デフォルトの名無しさんNGNG
639の書き込みが、どの話題に対してのレスなのか
明記されてないから、みんな直前の話題だと思って
いるのだろう。まぁ、書いた本人は脳内で違う話題に
レスをしているので、話がかみ合わなくなっている。
0645デフォルトの名無しさんNGNG
で、Hibernateで表がはいらないのは解決したのか?
0646デフォルトの名無しさんNGNG
R-Oマッピングをつくりませんかとの掛け声で奴が立ち上がった!
ttp://homepage2.nifty.com/igat/igapyon/diary/2004/ig040121.html



……だめぽ

0647デフォルトの名無しさんNGNG
>>646
誰かTorqueを教えてやれよ
0648デフォルトの名無しさんNGNG
テーブル名が日本語だろうと、項目名が日本語だろうと何の問題もなく使えるやつなら作ってくれ。
0649デフォルトの名無しさんNGNG
英語使えよ
0650デフォルトの名無しさんNGNG
>>648
ローマ字にすればいいのに。
0651デフォルトの名無しさんNGNG
>>649,650
貴様ら、負の遺産という言葉を知らんのか。(w
0652デフォルトの名無しさんNGNG
昔イジったシステムで、1つのカラムにカンマ区切りで値がはいってて、
それをsplitして他のテーブルを検索してくれってのがあったな。R-Oもクソもない。

Tierraって使ったことある人いない?
今仕様策定中のシステムで、TorqueかHibernateかその他のR-Oマッパーか
はてはJDBC+DbUtilsでゴリゴリか悩んでる中。DbUtilsでいい気がしてきた。
■ このスレッドは過去ログ倉庫に格納されています