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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
●各種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
2デフォルトの名無しさん:03/03/30 22:18
性能、パフォ、実績、事例など情報を持ち寄りませう
3デフォルトの名無しさん:03/03/30 22:19
Hybernateが結構よさげなんだけど、日本語リソースって見つからない。。。
4デフォルトの名無しさん:03/03/30 22:39
>>1
もうちょい時間おいてから
スレたてたほうがよかったかもしれない
JDOも発表されてまだまだ浸透してない
この辺はまだ過渡期だからな
5デフォルトの名無しさん:03/03/30 22:42
Torqueは、けっこー浸透してきたイメージがあるんだけど、
まだまだなんかな?
6デフォルトの名無しさん:03/03/30 22:49
>>5
トルクはまだいいけど
比べる対象が無いって言うのが現状(っていうか使わないから知らんだけなんだが・・・)
使ってる人がいればいいんだが日本語Docがなさそうなので
俺にも勉強する気ない。
仕事で、いやがおうにも使わないといけない状況にならないと
読む気しないんだな英語は・・・忙しいし
7デフォルトの名無しさん:03/03/30 22:56
とりあえずJDOをどのように解釈して
発表してくるのか
ベンダの動きを見てみないとわからん
まあ、そう遠い日の話じゃないと思うが・・・

まあ、Torqueに限ればロギングが
Log4jっていうのがどうも気に食わない
8デフォルトの名無しさん:03/03/30 23:07
仕事でJDKが、1.3と指定されれば、Log4jが現実的か。。。
>>7
Log4jで、JDK1.4 LoggingAPIにリダイレクトするアダプタ作ればエエヤン。
大して難しくも無いさ。
10デフォルトの名無しさん:03/03/30 23:13
>>9
うん、がんばってみる
11デフォルトの名無しさん:03/03/30 23:45
アプリ内の各モジュールから、JDBC経由でゴリゴリSQL投げるのって
コストかかりまくりだよね。最低限コネクションプーリングするとしても、
それプラスこういったフレームワーク使うとしたら、現時点では
トータル的にどれがベストチョイスだろう?
フレームワーク内でCPやってくれるやつってあんのかな?
>>11
EJBはCPが当たり前でつ。
1312:03/03/30 23:55
つうかJDBC2.0は自動的にCPです。
もうSQLは書きたくないでつ
15デフォルトの名無しさん:03/03/31 23:50
EOFマンセー
>>14
EJB 2.0 CMPで、SQL書くのをやめられるよん。
17デフォルトの名無しさん:03/04/01 01:38
ちょうどtorqueを昨日動かして見ました。JavaWorldの記事を読みつつ。
でも、ちょっと情報少ないかな。jakartaのCriteriaHowToとか読んでも
情報不完全で、詳しい使い方が判らない。

今悩んでるのは、複数のテーブルをJoinしてSelectする際に
各テーブルのカラムの値を同時に取ってくる方法ってあるんですかね?

つまり、role_idとrole_nameを持つRoleというテーブルが有り、
permission_idとpermission_nameを持つPermissionというテーブルが有り、
role_idとpermission_idを外部キーとして持つRolePermissionというテーブルが有る時に
関連付けられているrole_nameとpermission_nameを同時に取得したいのですが、どうでしょ?
torqueだと無理なのかな。
18デフォルトの名無しさん:03/04/01 02:44
>>17
勘コード。

Criteria crit = new Criteria();
crit.add(RolePermissionPeer.ROLE_ID,"ROLE");
List t = RolePermissionPeer.doSelect(crit);
RolePermission r = (RolePermission)t.get(0); // 一行Hitを想定ね
String roleName = r.getRole().getRoleName();
String permissionName = r.getPermission().getPermissionName();

・・・雰囲気はこんな感じか。細かいことは覚えてないからよろしく解釈しておくんなまし。
外部キーと一意制約がちゃんとschemaで定義してあれば楽なはず。

ただしこのまんまやると恐ろしくパフォーマンス悪い罠。
CriteriaのLeftとかRightとか言うメソッド(があったはず)を使うといいのかもしれん。(うろ覚えな上未検証)
あと各BasePeerにdoSelectJoinなんたらというprivateで隠されてるメソッドもあったりする。かも。

なんかいろいろ悪い夢を見たきがするなぁ・・・・。

EJB2.0の Many to ManyのCMRを利用するとよさそうだけど。
BEAやIBMのEJBサーバが賢いこととを期待して。
20デフォルトの名無しさん:03/04/01 11:14
>>18
レスありがと。
でも、それだとDBへの問い合わせが恐らく3回発生しますよね。
確かにパフォーマンスが悪い。

もうちょっと僕も調べてみます。
21デフォルトの名無しさん:03/04/01 14:17
>>18
>あと各BasePeerにdoSelectJoinなんたらというprivateで隠されてるメソッドもあったりする。

ソース読んで実験もしてみました。該当のメソッドを使用すると
一度のSQL発行だけで複数のテーブルの値を同時に取ってこれました。

ただチュートリアルにも書いてあったとおり、1つのテーブルしかJoinできず
例えばdoSelectJoinAllのようなメソッドは存在しません。
http://www.jajakarta.org/turbine/jp/turbine/torque/tutorial.html

となると、doSelectJoinなんたらのコードを参考にしてユーザが
実装するしかなさげです。

しかしdoSelectJoinなんたらのコードを読むと、
BasePeer.doSelectで取得したListから重複してるOM Classを除去している?
様子なので、JOINするテーブルの数が多いと面倒・・。

SQLの発行回数が気にならなければ、簡単に書けるのですが。
22lilac:03/04/01 14:22
eBrain21.comは、インターネットユーザーがホームページを
掲載するにあたって必要なサーバースペースを有料レンタルしています。
お客様に快適なサーバーを提供するためにさまざまなホームページの目的に応じて、
単なるホームページスペースだけではなく、動画やゲームまたは個人放送はもちろん、
そのツールとしてCGI、PHP、SSI、SQLデータベースなどあらゆるサーバースペースを提供しております。

http://www.ebrain21.com/

[email protected]
23デフォルトの名無しさん:03/04/01 17:22
Java⇔RDBのMappingのFramework俺作ったよ。しかも、中規模のシステムで安定稼働してるよ。
下記以外ならSQLを書く必要はありません。
一般的に使用頻度の少ない演算子や関数を使用するSQL文の場合。
万が一、複雑なSQLが必要な場合オーバーライドで対応する。
Torqueは設定がめんどくさい。あんな設定が必要なら、チームで開発する場合SQLを書いた方がまし。
しかも設定する情報はDatabaseMetaDataクラスで実行時に取得できる。
EJBやるやつバカ。そのうち無くなるよ!!
>>23
こうばしいな
25デフォルトの名無しさん:03/04/01 18:28
>>23
オープソンーヌで公開しる!
ライセソヌは、ApacheヌタイノレかBSDライセソヌで。
26デフォルトの名無しさん:03/04/01 23:12
>>23
あんたのそのやり方のほうが時代遅れなワケですが。

誰がそのフレームワークの仕様を管理し、メンテするの?
誰がそのフレームワークの利用方法を教育するの?
そのコストはタダじゃない。少なくともアンタの人件費分はかかるわけで。

標準仕様なら、多分たくさんのデベロッパがリテラシを各自で抱えることになる
ので、そういうコストが格段に少ないのですよ。こういったことを考えられない、
半可通技術マンセー馬鹿が、よく俺様フレームワークを書いて悦にいってるんで
すよね。あーやだやだ。
27デフォルトの名無しさん:03/04/01 23:16
多くのエンジニアに共通で認識されているということの重要性をわかってないんだね。
>>23を弁護するわけじゃあないけど、、、

じゃあ、どのORマッピングツールが標準仕様となって
将来に渡っても安心して利用できるかどうか判断できるのかと問い詰めたい。

ないならないで作るのが正しい技術者の態度だと思うんだが。
そうすれば、少なくとも自分の面倒みているプロジェクトでは安心して利用できるじゃん

一知半解たあ、>>26のことじゃないの?
2926:03/04/01 23:45
>>28
オプソでデファクト候補がいくらでもある分野でそれをやるのは
アホの所為。ないなら作るのは、しかたないと思うけどね。
>>28
別に将来の話をしてるんじゃない。
今すでにあるものが使えて、多くの技術者に認識されているものなら、
独自仕様突っ走るよりいいんじゃないの?
ってだけなんだけど・・・・
3126:03/04/01 23:56
ORマッピングについては、EJBの新しい仕様がAPサーバに内蔵させる
という方針で固まっている。(細かい仕様はシバラク右往左往するかも
しれんけど)
遠い将来にわたって使用できるものなど必要ない。なくなるんだから。
というか、26は何が言いたいのかがわからん。

>>29でデファクトスタンダードになる候補があるのに実装するのはアフォと言いつつ
>>31では現状の実装でデファクトになるもんなんざあないとおっしゃる。

あと、ちょっと別の話になるけど、
EJBってEJBコンテナが無いと利用できないんだよ?知ってる?
33デフォルトの名無しさん:03/04/02 00:13
TorqueでテーブルをロックするのってTorqueクラスでgetDBして
取得したDBのlockTableメソッドを呼び出す・・であってます?

でもDBPostgres.javaとかの中身を見るとメソッドの中身が空ですが・・。
それにhttp://db.apache.org/torque/db-adapters.htmlの

Databases that only support table level locking obviously
do not require this method. Databases that support row level
locking must implement this method to avoid synchronization problems.

というのも訳わからんし。なんでテーブルロックをサポートしているDBが
lockTableメソッドを必要としないのかしらん?
もしかして別な方法でロックできたりしますか?

あとFOR UPDATE付きでSELECTしたい場合とかはどうしたらよいのだろ。
>>32
EJBコンテナは、今日びオプソ版もベンダ製無料実装もありますし。
>>34
うーむ。DBアクセスをSQLレスで手軽かつ柔軟に実現できるフレームワークとして
Torqueに期待したのですが、今の状態ではやっぱり使えないですねぇ。
EJBもEJB-QLの機能は貧弱だし、BMPにすると結局はSQLを記述する事になるしで・・。
Jakarta が EJB コンテナのフル実装に行かないのは、やはりそこらの企業と
暗黙の了解があるのだろうか。
37女□:03/04/02 01:18
うーん

SQLに強い奴一人連れてきて
そいつに仕様叩き込んで 必要になりそうなセレクト文は全部viewにさせて
アプリからの呼び出しは 「select * from びゆ where ふがふが」 のみにする ってのが最強だと思ってたんだけど
最適化されたSQLが残って メンテするやつも勉強になるし

更新系は業務ベースで更新対象をモデル化して、モデルクラスをポコポコ作って実装してもらう
コネクションの管理(取得と返却とコミとロルバク)はモデル達の基底クラスにやらせる
更新系は長くて複雑なSQLなんて出てこないだろ(甘いか)
38女□:03/04/02 01:21
DBのフレームワークってSQLを手で書かなくていいようにするのが目標なのかね
SQLは手でモロに書くものだと思ってるから かなり受け付けない

オラクルしか使ったことないからこんな考えになるんだろうな
>>38
EJBの目標は、ストレージの形態に依存しないインターフェイスにすること。
RDBだろうがOODBだろうがebXMLだろうが、未知のより進歩的なストレージだろう
がシームレスに使えることが目標なのよ。

だからEJBは、RDBに対して最適化されたインターフェイスが提供されるわけじ
ゃないのよね。RDBから自由になるって言う発想は、想定外?
4039:03/04/02 10:05
とはいっても、当分現実はRDB相手オンリーだろうケドネ。
TorqueにしろJDOにしろ可読性がもう少しどうにかなると助かるんだが...
>>39
> RDBだろうがOODBだろうがebXMLだろうが
これって、多次元DBについても言える?
実装はともかく、方針とか、目標とかの話で。
43デフォルトの名無しさん:03/04/02 21:52
Torqueを導入した事例ってあるのですかね?
かなり使えないっぽいんだけど。
めんどくさいのはSQL作ること自体より、JDBCプログラミングするとこだと思ってるんですが
45女□:03/04/02 23:13
>>39
>RDBだろうがOODBだろうがebXMLだろうが、未知のより進歩的なストレージだろう
>がシームレスに使えることが目標なのよ。

DBにあんな皮こんな皮かぶせてjavaで使えるようにするより
javaに合わせたデータベース作った方が早いと思うんだけど

なんとかを継承したクラスでstore()メソッド呼んだら
テーブルにデータが保存される(テーブルなかったら勝手に定義される)とか
そういうのはないのかね
>>42
DWHとかOLAPとかはOut of 眼中じゃないの?
>>45
EJBが目指しているのもたぶんその辺。
ObjectStore等のODBもそんな感じ。
でもどれもこれも不完全で不満だらけなのが現状。
48デフォルトの名無しさん:03/04/03 04:07
正直、DB周りは直接SQL書くのが一番手っ取り早い。
今時、SQL知りません、わかりません、かけませんなんてやつ居ないでしょう。
49デフォルトの名無しさん:03/04/03 04:20
Oracleなどが全部Javaでできていれば楽なんだよな
そもそもEJBが・・・っていう話が
でてキソウデ怖いんですが。
> 今時、SQL知りません

ベンダ固有の瑣末なテクが必須っぽいので手を出しかねてます。
52デフォルトの名無しさん:03/04/03 12:22
WebObjectsに含まれてるEnterprise Object Framework使うと、
TorqueやらJDOやらの中途半端なマッピングライブラリが赤子のように
感じる。売り物だけど安いし。
SQLなんか書く必要無し。RDBのスキーマ情報を自動でブッコ抜いてきて、
クラスにマッピングされたものと、アクセスに便利なメソッドを自動生成。

しかし知名度も低くツブシが効かないという罠。
シロウトにはオススメできない。
53デフォルトの名無しさん:03/04/03 12:59
>今時、SQL知りません、わかりません、かけませんなんてやつ居ないでしょう。
sqlなんてselect,insert,update,deleteくらいしかないもんな。
やりたい事がわかってれば、あとはリファレンスでも見れば
さくっとSQL文が書けるよ。
そもそもJavaとは速度が足りない状況になったら
よりよいハードを買ってくれというものだから、
パフォーマンス云々は関係ないんだろな。
55デフォルトの名無しさん:03/04/03 13:59
>しかし知名度も低くツブシが効かないという罠。
>シロウトにはオススメできない。

知名度が低いっていうのは、確かに致命的だよね。
永遠に自分が保守できるはずもないし。
>>55
結局、どんなにいいものかよりも多くの人に認知されているかが重要ってことなんだね。
だからオリジナルフレームワークが嫌われる。
いつの間にかいいスレができてるな。
このテーマのスレ、待ってたよ。
58デフォルトの名無しさん:03/04/04 00:26
>>43
つこうたよ。認証処理程度だけどね。
IDEとかでコード書きやすくなるのがうれしかったくらいかなぁ・・・。

どっちかっていうとOMクラスよりはデータの吸出しとか
HTMLで定義情報はいてくれたりする事のほうがうれしかった。
RDBに接続してschema.xmlを自動で作ってくれる機能があるのを
最初から知ってればもっと楽になれたんだろうけど。

AntタスクなのでEclipseあたりのIDEとうまいこと統合できるといいのだがねぇ・・。
59デフォルトの名無しさん:03/04/04 03:34
100% Pure Java のRDBMS
これでなんとか・・・・

「Java開発にはJavaデータベースが自然」――米ポイントベース社長
http://itpro.nikkeibp.co.jp/free/NC/NEWS/20030402/1/
>>59
Eclipseにシェアを食われつつあるJBuilderの二の舞を踏まないことを祈るばかり。
>>60
むしろそのPureJavaRDBMSをただで配布して欲しい
62デフォルトの名無しさん:03/04/04 11:24
>>61
開発用はただで手に入るね。
>>59
RDBMSである以上、セマンティックギャップは同じようにあるのだがね。
>>61
こういうのもあるが
http://hsqldb.sourceforge.net/
"hsqldb is a relational database engine written in Java"
だそうだ。
65ヽ(´ー`)ノ:03/04/04 12:41
こんなのあったのか。Torque 面白そう。

>>17
JavaWorld って今月の?ちょっと読んでみまふ…。
66デフォルトの名無しさん:03/04/04 14:21
>>65
4月号に載ってます。
あと技術評論社の「Jakartaプロジェクトテッテイ攻略」にも載ってました。

ただ、少し詳しくいじりたいと思ったらJakartaのページを読むしかないのですが、
余り詳しくは書いてないので、情報収集は結構大変。
Ja-Jakartaにはチュートリアルなどの和訳が有ります。
http://www.jajakarta.org/
http://www.jajakarta.org/turbine/sharing.html

個人的には
・3つ以上のテーブルのJoinがサポートされていない
(2回以上のSQL発行が必要、Viewを使えばよいのかもしれませんが)
・DB依存の書き方は結局残る。(レコードのロックとか)
・普及していない。日本語の資料が少なくTorqueを使える技術者が少ないので将来の保守が心配。

ので、今自分が担当しているプロジェクトで使うのは止めました。
67デフォルトの名無しさん:03/04/04 14:32
>>67
LZHに直リンするスクリプト死ね。
69デフォルトの名無しさん:03/04/04 15:29
>>59
どっかで聞いたことあるなと思ったら
ポイントベースってSUNONE4に入ってたのを思い出した
SUNONEインスコしたときに「何だコレ?」と思いつつも
一応、インストした覚えがある
>>62のいうように開発版だとは思うが・・・
ちょっといじってみるかな
70ヽ(´ー`)ノ:03/04/04 15:48
>>66
サンクス、参考になります。
jakartaのページ見てみましたが、学生なんで業務に使うわけじゃないんで、
現状のままでも大体満足です。ありがとう。
71デフォルトの名無しさん:03/04/04 17:46
Torqueに詳しい人いる?
TorqueってpreparedStatementみたいなSQLのプリコンパイルって
できるの?どうやってやるんすか?
基本的にORB全般的にプリコンパイルはできない?
ただでさえ遅いのに、これできないとつらいなー。
>>71
ソースを少し読んでみましたが、たぶんTorqueでは無理だと思います。
毎回Statementを作成し直してるみたいです。
73デフォルトの名無しさん:03/04/04 18:40
>>72
センキュ!
でも、もうTorque使用することになったんだよなー。。。
74デフォルトの名無しさん:03/04/04 20:25
Torqueってどういうときに便利なんですか?
75デフォルトの名無しさん:03/04/04 21:30
>>71-72
たしか、PSなんとかというメソッドがあったきがする。
DocかなんかにPreparedだとコメントしてあった記憶が・・・。
といって使ったことはないので真偽不明でふ。
嘘だったらすまそ
7671:03/04/04 22:08
http://jakarta.apache.org/turbine/torque-3.0.0/apidocs/org/apache/torque/util/BasePeer.html
にdoPSSelectってのがあったよ。
>>74
JDBCのコーディングが簡略化できるのが最大のメリットでは?
ただそれだけと言えば、それだけだな。
SQL書いたほうが可読性がよさそうな気もしないでもない。
あとCreate文の生成とかデータベースの作成とか付属的な機能もあるけど。
ほかに何かあります?
7772:03/04/04 22:54
>>76
TorqueでPreparedStatementを使っているのはBasePeerのdoPSSelectの中だけのようです。
そのメソッドの中でローカルなPreparedStatementを作成して1回だけexecuteQueryしているだけなので
複数回効率的に実行する目的ではPreparedStatement使用していないのかなと思いました。
7872:03/04/04 23:02
一度作成したCriteriaからPreparedStatementを作成して、
効率的に同じCriteriaを複数回実行・・とかは出来ないようです。
んー。。。

Criteria.CriterionにもappendPsToとかいうのがあるなぁ。
説明見てもそっけなくてよくわからん。

Criteriaのなかでこれよんだりしてるんだろか。
ソース見る気力ない・・・。

なんか、個人的に使った感触だとCriteriaは使いまわすもののように思えなかったなぁ。
DBに投げた前後で内容が変化したりしてなかったっけ・・・。


効率悪いことこの上ないんだけども・・・。
80デフォルトの名無しさん:03/04/05 04:00
「コネクション張ってSQLをゴリゴリ書いて、投げて受けてクローズ忘れずに・・・」
っていう一連の処理が当たり前になったしなぁ・・・
かといってこういうフレムワーク&JDOの存在は無視できないし・・・
>SQL書いたほうが可読性がよさそうな気もしないでもない。
そうなんだよな、少なくとも俺にとってはそう思う
俺の場合はデータベース接続部分を別管理にしてるから
そのほうが見やすいということもある

>あとCreate文の生成とかデータベースの作成とか付属的な機能もあるけど。
>ほかに何かあります?
ん?Create文データベース作成は通常でも出来るんじゃないの?
俺昔、MySQL用のSQLのターミナル作ったとき
URLにデータベース指定しないで単に「jdbc:***:mysql」でとめてやったら
Createも、use DataBase名やshow databasesとかもできたよん
>>80
76ではないけれど。
>>あとCreate文の生成とかデータベースの作成とか付属的な機能もあるけど。
>>ほかに何かあります?
>ん?Create文データベース作成は通常でも出来るんじゃないの?

Torqueの例でいくとXMLで定義した情報をベースにOMクラスをつくるんだけど
同じXMLをもとにDB構築用のSQLを自動生成してDB作りに行ってくれる。
その辺のことを言ってるのだと思われ。

逆にDBを先に構築しておいてそのDBから定義情報を引き抜いてXML生成→OMクラス生成とかね。
データの引き出しなんかもできるから場合によっては環境移行ツールとして使えたりもする。
本筋と外れたとこで便利なんでは?と。
8271:03/04/05 09:18
>本筋と外れたとこで便利なんでは?
普通にJDBCでやるとして、テーブル作成だけTorque使うってのもありだと思う。
テーブル定義書からDB作成なんてツールもPOI、xpathあたりを使えば
簡単にできそう。大幅なコストダウンってわけでもないが、、、

本筋のコーディング部分のところは、今のところメリットは薄そうだね。
学習コストもかかるし、、、
>かといってこういうフレムワーク&JDOの存在は無視できないし・・・
同意。雑誌とかでも結構特集されてたりすると、つい良いもんだと
錯覚してしまうよ。この辺の見極めも大事かな。
83デフォルトの名無しさん:03/04/05 10:39
>>80
> >SQL書いたほうが可読性がよさそうな気もしないでもない。
> そうなんだよな、少なくとも俺にとってはそう思う
> 俺の場合はデータベース接続部分を別管理にしてるから
> そのほうが見やすいということもある

そうかなぁ?
ひとつのコード中に二つの言語があるということのほうが気持ち悪いと思うけど。
なるべくそういうことは可視性から言っても避けるべきだと思う。
同じようにHTMLの中にJavaのコードが入ることを避けるために、
TaglibやVelocityなんかのTemplateがあるわけだし。
84デフォルトの名無しさん:03/04/05 14:03
前のレスにもあったが、結局はプロジェクトに一人
SQLマスターな奴がいればいいんだよな。
速度の問題が出てくると、結局SQL一発でやった方が
ダントツに速い場合がでてくるし。
>>83
言語内言語だから正規表現みたいなもんじゃない?

正規表現をJavaのメソッドで構成したら、それは可読性が
高いと言えるんだろうか?
>>82
うちの職場では、ExcelにDBの定義書を書いて
スクリプト一発でsqlに変換してる。
>>86
オレはスクリプトじゃなくて、た
VBAでさらにテーブル生成までを作った。
(外部キーやPKも)
だけどERwinがあればERwinが一番いい。
>>82
>普通にJDBCでやるとして、テーブル作成だけTorque使うってのもありだと思う。
うちは結局これで、ほとんどOMクラスは使ってなくて、
直接SQLを書いてTorque経由で投げてる感じ。
ConnectionPoolの管理とか考えてないのでそれだけでも楽っちゃ楽。

>>83
最近思うんだけどタダ単にマークアップ付き言語が読みづらいだけなんじゃなかろか。
慣れなのかもしれないけど・・・。
少なくとも一般的なプログラミング言語の書式と混在し得ないような気がする。
Javaの中のSQLはうざいけど、流れをそのまま読めるし。

>>86
>>87

俺、自マシンからは直接通信できないネットワーク(要するに客先なんだけど)に
開発環境を構築しなくちゃならないことがあった。
Telnet等でいくつかホストを経由しないと接続できない。

まぁレアケースなんだろうけどTorqueのおかげでローカル環境で作ったものを
むこうで再構築するのが割と楽になったよ。
89デフォルトの名無しさん:03/04/05 19:53
SQLってそんなに学習時間かからんよな
まあ、問題なのはソコではないとは思うのだが・・
ポーティングの問題もあるね。
地獄を見た事の有る奴、結構いるんじゃない?
91デフォルトの名無しさん:03/04/05 20:25
>>90
そんな恐ろしいんですか?
全然知らんけどっていうかポーティング自体知らんゴメン
JavaでのSQL直書は流れがそのまま読めるので、確かにメリット。

だけど実行してみないとケアレスみすすら分からない。
>>92
プログラム書く前にSQL実行しない?
>>93
簡単な修正なら実行しない
DBシステムにおけるAPの本来の目的は
SQLを発行し、DBへのI/Oだから、SQL生成
プログラムとなっても仕方ないのでは?

もしユーザ(オペレータ)がSQLを知っていたら
(熟知していたら)APなんて必要ない訳だし。

DBシステムなら、必ずしも一つの言語から
アクセスするということでもないし、
(パッケージで単にDBをストレージとして
見るなら別だけど)
言語別にDBアクセスの方法を覚えるの
もなんだかなぁとも思える。

WEBにしてもそう、最終的にはHTML
(やJavascript)で表現するから、
HTML生成がゴールとなってもしょうがない。
>>94
おれは、修正云々じゃなくて、
>(プログラムを作って)実行してみないとケアレスみすすら分からない。
ということに答えたんだけど...
もし、(最初にSQL実行)してないのなら
まず目的のSQLを書いて実行してから
プログラム製造することを勧めるよ。
そうすれば、ミスもわかるよ。
>>95
そうなんだけど、>>92の言うように動的SQLや動的HTMLはコンパイル時点では
ケアレスミスさえ発見できないという問題があるから、そういった部分をTorqueや
JSP+タグライブラリなどで局所的、静的に正しさを保証できる範囲に押し込めて
おいて、あとの全てはJava言語の世界で解決しようという思想なんじゃないかな?
>>97
>コンパイル時点では
>ケアレスミスさえ発見できない
なつかしい...PowerBuilderという
開発ツールは、埋め込みSQLでも
コンパイル時点でエラーが分かった。

だけど、そういう仕様だと、
コンパイル時点でDBに接続しておかないと
SQLエラーか分からないし(そうだよね)、
接続してないと、ワーニング出まくった
けど、それでもいい?
確かにSQL解析は便利だったけど、
プログラム書くときはそっとしておいて
欲しいと思ったのは贅沢だったかな。
>>98
TorqueやWebObjectsはコンパイル時にいちいちSQLを投げたりしないよ。スキーマ定義
(と各DBMS固有のSQL方言についての知識)さえ持っていれば「エラーにならないSQL」を
生成することは可能だし、そうしょっちゅうスキーマが変更されるわけじゃないから、常に
最新の情報をリアルタイムで取得する必要はないと思うけど。
まぁフリーフォーマットの埋め込みSQLの正しさをチェックするには、実際にDBMSに
投げるか、同等の構文解析エンジンを持つしかないんだろうけど。
>>90-91
あるベンダのDBからほかのベンダのDBに移行するような場合の問題だよね
たしかにちょっと特殊なことをやろうとするとすぐ面倒なことになりそうだ




最終的にはJDO準拠のものか、EJBのCMPに落ち着くような気がする。
そうだね。
JDOって始めて知った。有名なの?
微妙な問題だな もれのちょっと思いついたこととしては

* 何十年後かはSQLは無くなってXMLにおけるDOM API, みたく、言語を超えた共通のRDBデータ取り出し用APIが開発される。
* 現状では、自前でその特定のアプリに特化したSQL生成プログラム・フレームワークをプログラマが作るのがいい(シンプルにいこう)

105デフォルトの名無しさん:03/04/06 13:21
>>103
全然有名じゃ無いから知らなくて良し
106デフォルトの名無しさん:03/04/06 21:04
RDBである必要は全く無いんだがな。
smalltalk+OODBが最強。
107デフォルトの名無しさん:03/04/06 23:50
あるクラスに対応するテーブルが二つあります。
例えば「商品クラス」があって商品名や説明文の
インスタンス変数を保持していたとします。日英の
バイリンガルな仕様で、「商品日本語テーブル」と
「商品英語テーブル」がDB内にはあります。

Item item = 生成メソッド(itemId, language);
みたいな形で、商品オブジェクトを取り出したいのですが、
Torqueで実現できますでしょうか?

もしTorqueでは出来ないとすると、他のツール、あるいは
CMPで実現することは可能なのでしょうか?
108あぼーん:03/04/06 23:50
   ,.´ / Vヽヽ
    ! i iノノリ)) 〉
    i l l.´ヮ`ノリ <先生!こんなのがありました!
    l く/_只ヽ    
  | ̄ ̄ ̄ ̄ ̄|
http://saitama.gasuki.com/koufuku/
>>107
そういうのをやるためにこのスレの話題にでてくるモノたち
があるわけですが。
>>106
漏れは保守的なので Ruby/DBI でいいです。
MySQLの全文検索機能を使いたいんだけど、そういうDB依存な物も
Torqueから使えるの?
112デフォルトの名無しさん:03/04/11 23:31
Torqueの「sql2xml」機能を使えている人はいますか?
Antで実行すると、いつまで経っても処理が終わらない。
たった人のテーブル定義でさえも。
なぜ?
>>112

やったことないけど
SQLでテーブル作ってしまってjdbcタスクでとりだすというのではいかんだろうか。




TorqueのAnt使う処理っていろいろ配慮が足りてなくて、
いつも今ひとつ痒いところに手が届かない感じ。
もうちょっと手を加えるといいのだろうけど・・・。
114山崎渉:03/04/17 15:30
(^^)
115デフォルトの名無しさん:03/04/17 21:00
保守あげ
117山崎渉:03/04/20 03:13
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
118山崎渉:03/04/20 03:47
   ∧_∧
  (  ^^ )< ぬるぽ(^^)
保守だゴルァ
120bloom:03/05/02 19:13
121.:03/05/10 12:28
122デフォルトの名無しさん:03/05/11 12:55
最近のStruts関係の本を読んでるとOJBつかってる本が多いようだ。

うーん、でも今後はJDOで落ち着きそうだね。
今後たてつづけにJDOの本がでるし。
オライリーのJDOの本はそこそこよさそうだね。洩れも注文したよ。
http://jdocentral.com/JDO_Books.html
123デフォルトの名無しさん:03/05/11 12:58
オライリーのJDO本は、JDO作者(Craig Russell)が書いてる本だから買いだね!
http://www.oreilly.com/catalog/jvadtaobj/
>>122
その本、前から気になっててサンプルチャプターを
読みました。英語が苦手というわけではないのだけど、
内容が難しくて買うのを断念しました。
125デフォルトの名無しさん:03/05/12 19:13
JDOがなかなか普及しないのは、フリーで使えるJDO実装がないから?
126デフォルトの名無しさん:03/05/12 23:54
うん、きっとそのとおりだと思う>フリーのJDO実装
商用だといくらくらいするんだろう。
5,000円くらいなら払ってもいいよ。

てか、シェアが高そうなJDO実装って何。
どこで調べればいいの。
128デフォルトの名無しさん:03/05/13 12:13
Torqueは割と日本語記事も時々見かけるんだけど、
Castor, OJB, Hibernateあたりを比較して使ってみたヤシはいますか?

将来的にJDO/CMPで落ち着くのはいいんだけど、
こちとら三ヶ月先で動くモノを構築することを考えないと
いけないんで……。

>>128
日本語記事を抜きにしても、Torqueが使用方法を学ぶ上では
楽だった。
130デフォルトの名無しさん:03/05/13 13:13
>>128
CastorJDOを仕事に使った。
俺が調査した時点では、Torqueはガラクタの寄せ集めみたいで
とても使えるシロモノではなかった。
131デフォルトの名無しさん:03/05/13 13:38
CastorはXMLマッピングはJAXBよりいいと思ったが、JDOは・・・。
132デフォルトの名無しさん:03/05/13 14:33
>>127
ここで調べろ
http://jdocentral.com/
133128:03/05/13 15:26
>>129,130,131
参考になります。いまはTorqueはちょっと措いといて、
いま、Castor/OJB/Hibernateを調査してます。
KickStartとかTutorial程度を見る限りでは、
マッピング用XMLの書き方としては、
Hibernate >>> CastorOJB(どっちもどっち)
という印象なのだけれど、そんなことないのかな。

XDocletが対応してくれてたり、やEclipseでのプラグインがあったり、
というのも助かるので、Hibernateに惹かれているのだが、
このスレ見てる人的にはどーでしょう?
134 :03/05/13 16:11
hibernateはtorqueよりはわかりやすい。
eclipse pluginのhibernatorを使おうとしてDBにconnectすると
java.lang.IllegalArgumentException: Path must include project and resource name: /プロジェクト名
とか言われて動かない。
DBの接続設定は多分間違ってないと思うんだけど、原因わかる人いますか?
135134:03/05/13 16:44
hibernate勉強中です。

ところでhibernate query languageってなんだ
SQLよりわかりにくいぞ
136128:03/05/13 17:28
XMLマッピングファイルの比較(?)が終わって、
クエリのところに来たんですが、
HQL(w って、独自仕様?
FAQを眺める限りだと
「SQLとそんなに変らないから安心して使ってね」と言っているように
みえるけれど、独自仕様なことに変りはないんよね?

これは実際の仕事プロジェクトで導入するには
抵抗に合いそうな予感……。

私ももうちょっと勉強してみます。
137130:03/05/13 17:43
>>136
参考までに、CastorJDOもOQLっていう独自の言語でオブジェクトを
fetchする必要があります。

SELECT o FROM com.example.package.Person o WHERE id = 1

こんな感じ。

138128:03/05/13 17:45
>>137
仕事で使うにあたって、
プロジェクトや顧客の抵抗にあったりしませんでした?
139130:03/05/13 17:59
>>138
自社プロダクトでしたので特に問題は無かったです。
ただ、マッピング&クラス作成がほぼ手作業になってしまって
あんまり工数削減につながらないので、CastorJDOを使うのは
これっきりという感じ。

Hibernateはよさそうね。
140128:03/05/13 18:03
>>139
導入に抵抗が無かった、ってのはいいですね。
クラスはともかくもマッピングが手動でしかやれない、
(もしくはツールを開発する)となると工数的なメリットは
キビシイっすね。
Castorもそうだし、OJB(の現状?)もそうなのかな。

ドキュメントもちゃんとしてそうなので、
ちょっとHibernateを実コードベースで調査したいと思います。
Hibernate は何て読めばいいのでしょうか?
142デフォルトの名無しさん:03/05/13 22:10
はいばねーと、でええんでないか
http://dictionary.goo.ne.jp/search.php?MT=hibernate&kind=ej
ノートPCのハイバネーションと意味的には似たようなもンだろう
143U ◆CZtFsGiu0c :03/05/14 01:01
>>137
OQLは「独自言語」ではないと思うが。
もしそれがOMGで既定されたOQLと違うのであれば別だけど。
144デフォルトの名無しさん:03/05/14 09:41
>>143
http://castor.exolab.org/oql.html
ODMG3.0仕様のサブセット + 独自方言だそうな。
まあ、どこのSQLも方言はあるしな
145デフォルトの名無しさん:03/05/14 10:52
OJB使ってるヤシはいますか?

146デフォルトの名無しさん:03/05/14 13:01
Hibernateの1.2系と2.0系は大きくどこが変わっているのでしょう?
今から学びはじめるとしたらRC2の段階の2.0系でしょうか。
147デフォルトの名無しさん:03/05/14 15:29
EJBつかえばいいじゃん。
148130:03/05/14 16:40
>>147
EJBじゃオオゲサなプロジェクトだってあるしね。
149デフォルトの名無しさん:03/05/14 16:43
((≡゜♀゜≡))いいよ〜
http://homepage3.nifty.com/coco-nut/
150134:03/05/14 16:47
>146

パッケージ名が変わってたり

Hibernate.createDatastore().storeClass(Foo.class)..buildSessionFactory();



new Configuration().addClass(Foo.class).buildSessionFactory();

にかわってたり、ドキュメントがないのが痛い。


151128:03/05/14 18:01
>>150
いま、1.2.3のドキュメントを攻略中なんだけど、
やっぱり2.0にトライするのに
http://hibernate.bluemars.net/68.html
だけだとツライ?
152デフォルトの名無しさん:03/05/14 18:54
おまいらヴァカだな。なんでデファクトスタンダードのSunJDOを使わないんだ?
オライリーからも本がでてるし(しかも米国では売れてる)、教材にはもってこいじゃないか。
153デフォルトの名無しさん:03/05/14 19:23
オープンソースかフリーの実装でコレ!ってのはあるの?
いまちょっとぐぐって見つけたもの:
http://tjdo.sourceforge.net/
他には?
Torqueでレコードレベルのロックを掛けたいときはどうすればいいの?
155デフォルトの名無しさん:03/05/14 23:49
XORM(クソームってなんかフリ鯖を思い出すな。)
http://xorm.org/
156デフォルトの名無しさん:03/05/15 00:03
「Programming Jakarta Struts」、
「Professional Struts Application」ではOJBをつかってるね。
もちろんOJBもJDOAPIサポートしてるよ。
157146:03/05/15 00:45
>>150
ダウンロードすると中にドキュメント入ってたよ。
2.0 beta 5のやつだけど。
158デフォルトの名無しさん:03/05/15 03:00
>>153
TJDOはいまあるフリー実装の中では、多分一番いい出来だと
思う。(ドキュメントを読む限りで。ソースを見たわけではない。)
ただ、アプリケーションサーバで使う場合にDataSourceを
JNDI経由で取って来れないのが、オレの中では×。

>>156
OJBはJDO APIが使えるだけで、マッピングは独自のものだよね?

Hibernateは確かに惹かれるものがある。が、JDOではないのが
ちょっと気になる。ただこのままフリーで優れたJDO実装が当分
出てきそうもないのなら、Hibernate使うしかないじゃんと
自分を説得しようとしている。

Torqueは使ってみたけど、BaseXXX、BaseXXXPear、XXXPearとか
たくさんクラスが生成されるのがイヤになった。ちょっと複雑な
Selectをしようとすると、途端にCriteriaの生成が難しくなる。


159デフォルトの名無しさん:03/05/15 10:42
XORMのFeaturesをざっと見たんだけど、
これも現状だとコンテナJNDIからのDataSource利用は
できないのかな?
160134:03/05/15 10:42
>157
ありゃほんとだ。ホームページさがしてたよん。
で2.0のドキュメントみたけどサンプルコードがいっぱいのっててイイ!
なので1.2は捨て。
161128:03/05/15 10:49
>>160
をを。ほんとうだ。昨日一日1.2のドキュメント読んでたよ....
162デフォルトの名無しさん:03/05/17 00:08
いま、OJBのページを翻訳しながらいろいろためしてるところ。
163デフォルトの名無しさん:03/05/17 03:18
>>162
OJBの翻訳サイトあるよ。http://www.terra-intl.com/jakarta/ojb/

わいのマイブームはStrutsとOJBを連係させることかな。
いいチュートリアルサイトがあるべ。英語だがね。
http://www.robertoghizzioli.it/jcomm/jcomm_tutorial.html
164デフォルトの名無しさん:03/05/17 11:22
>>163
それはさすがにしってる。
でも、チュートリアルとかは翻訳されてないから、そことかね。
165デフォルトの名無しさん:03/05/17 11:26
エロ嫌いならクリックしなきゃいいじゃん。
http://accessplus.jp/staff/in.cgi?id=11141
プニュ ( ゚∀゚)σ)´Д`)
166デフォルトの名無しさん:03/05/20 15:47
torqueよりもOJBを使うべき理由ってどんなのがありますか?
167デフォルトの名無しさん:03/05/20 18:24
数ヶ月前の月刊JavaWorldに、
OJBもTorqueベースで開発されている、みたいなことが
書いてあったんだけど、そうなんですか?

自分で確認しようと思ったんだけど、Torqueがわからないので……
168デフォルトの名無しさん:03/05/20 18:26
>>168
それ笑えるな
本当に女で13歳だったらなかなかすごいかも知れんなw
170デフォルトの名無しさん:03/05/20 22:23
>>167
OJBは足周りにTorque使ってるよ。
171デフォルトの名無しさん:03/05/20 22:26
Torqueはクラス作成&データベース作成を自動でやってくれるからゼロから作るときにはTorqueが便利。
OJBはクラス作成もデータベース作成(内部テーブルはTorqueを利用)も自分で作るから自由度が高い。
後で変更するときに簡単に修正できる。

>OJBもTorqueベース
OJBはauto_incrementを利用するときに内部テーブルを作るんですよ。
そのときにTorqueを利用します。
172デフォルトの名無しさん:03/05/21 15:52
Torqueは外部結合は出来ないんですか??
173172:03/05/21 16:12
自己レス。できないんだってサ
174デフォルトの名無しさん:03/05/21 16:27
正規化しまくって何でもかんでもJOINで取得するようなテーブル定義だと
CastorでもTorqueでもHibernateでも、いまいち馴染まない気がする。

この種のデータバインド機構を使うなら、ある程度割り切らないと
駄目なのかねえ。

175172:03/05/21 17:43
内部結合は出来たので、とりあえず書いておきます

顧客を表す以下のテーブルがあるとします。

create table employee (
id numeric,
name varchar;
manager_id numeric
);

idはキーであり
nameは名前
manager_idはマネージャのid(自己参照)が入る

//片方のテーブルにe2というエイリアスを設定する
criteria.addAlias("e2", EmployeePeer.TABLE_NAME);
//idが1であるレコードを検索対象とする
criteria.add(EmployeePeer.ID, 1);
//managerのidが1であるレコードを検索対象とする
criteria.add("e2.id", 1);
//自己結合の設定
criteria.addJoin(EmployeePeer.MANAGER_ID, "e2.id");
外部結合するのなら、直接Toroqueをつかうより
Viewをつかったほうがパフォーマンス的にもいいと思うんだが。
177172:03/05/22 14:00
Viewを使って試験したのですが
あるテーブルを結合させる処理を1000回行ったところ
JDBCを直接操作する処理では平均で1.8秒かかったのに対し
Viewを使用したTorqueでは2.3秒
Viewを使用せずにTorqueの機能を利用して結合させたところ3.4秒でした。
178デフォルトの名無しさん:03/05/22 14:22
>>174
哀しいけれど、O/Rマッピングツールの目的は
ObjectをRDBにどれだけ楽して格納するか、であって、
RDBレコードを如何にしてObjectとして扱うか、が目的では
ないんだよね。

なので、行儀正しく正規化されたDBありき、だと
ツールの特性を梃子にした生産性の向上は実現しづらい。

なにごとも適材適所。
照会系は「JDBC for Reading」で割り切るのもテかな、と
あらゆるオブジェクトを透過的に操作できるのは
理想的だけれど、スループットを考慮にいれると、
現状ではなかなかそうもいかないですよね。

切り分けの境界をどこに置くかがなかなか難しいんだけれど、
そこをきちんと定義できてこそエンジニアかな、とも思う。

私もここらへんはまだまだ手探りなので、
このスレの意見はとても参考にさせてもらってます。
179172:03/05/22 14:57
JDBC+Viewの試験もしてみました。
Torqueの場合はかなり高速化されたので、こちらはさぞ早いだろうと想像しましたが
何と平均が1.8秒→2.1秒と0.3秒もダウン
>>179
どのようなスキーまでどのようなSQLを実行したかによってスピードなんて変わってくるからね。
1000件で2秒前後ならそんなもんでしょ。

そこまでクリティカルなスピードを求められるならTorqueやJDBCをじかに呼ぶより
EJBを導入することを考えたら?

OJBならEJBと連携できそうだし。
181172:03/05/22 22:56
>>180
EJBも勉強してます。

とりあえず今は、お手軽にDBを操作する方法は無いかな〜と思ってて。
前は「俺実装」のライブラリを一生懸命作ってたんですが、
そんなのより世の中に有る物を使ったほうがいいかなって。
182デフォルトの名無しさん:03/05/23 00:52
だれかExpressoのO/Rマッピング使ってる方いますか?

TorqueとOJBを試してみたので(個人的にはOJBが簡単で好き)
今度はExpressoを試してみようと思います。
183デフォルトの名無しさん:03/05/23 02:28
WizOnline開発中!プログラマ緊急募集(C,Java)
http://219.96.231.242/wizonline/
2chスレ
http://game3.2ch.net/mmominor/dat/1053536167.dat


184デフォルトの名無しさん:03/05/23 18:10
OJBですが、tutorial1を試してそれからPostgreSQLで
tutorial1のサンプルアプリを動作さすところまで実験しました。

でも、最初からアプリを作成する方法がよく分かりません。
PostgreSQLで動かそうと思っても、最初にOJB_HL_SEQテーブルが無いとかのエラーがでるし。
「何そのテーブル?」って感じでした。

一から作成しているチュートリアルって何処かに無いですか??
185デフォルトの名無しさん:03/05/23 21:20
>>180

>そこまでクリティカルなスピードを求められるならTorqueやJDBCをじかに呼ぶより
>EJBを導入することを考えたら?

EJBってJDBC直より速いか?
186デフォルトの名無しさん:03/05/26 03:14
>>185
それは断じてないでしょう。
>>185 >>186
EJBもJDBC使ってるのですが
188デフォルトの名無しさん:03/05/26 16:21
>>187
だから、JDBCを直接つかう場合よりもオーバーヘッドが増えて遅くなるって話だろ。
189172:03/05/26 16:40
OJBも実験してみました。
SELECTを試したのですが
idとnameを持つテーブルを1000回selectする実験では

JDBC:1311ms
Torque(BasePeer#doSelect()を使用):1505ms
Torque(BasePeer#doPSSelect()を使用):914ms
OJB(PersistentBroker使用):3625ms

と、言う結果でした。
なぜかTorqueのdoPSSelectが最強です。
OJBはリフレクションを多用しているせいか、かなりの低パフォーマンスですね。
190172:03/05/26 16:44
ただ、OJBはTorqueよりもエレガントなコードが書けそうです。
191172:03/05/26 16:45
あと、JDBCはPreparedStatementを使用しました。
EJBはキャッシングがあるから、場合によっては生JDBCより早いんでないの?
複雑なアプリでどの程度効用が得られるかはかなり疑問だが。
193山崎渉:03/05/28 12:43
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉
194デフォルトの名無しさん:03/05/28 14:56
保守
>>188
全体的な視野で JDBC直 と EJB(CMPEntityBean) とのパフォーマンス比較を
すべきだと思うよ。自分でJDBC直でちまちま実装するより、EJBコンテナに
任せたほうがより効率的に処理することもあるんでないの?
196デフォルトの名無しさん:03/05/28 21:33
>>195

JDBC for Readingパターンっていうわけじゃないけど、
通常はEJB(EntityBean)を使いつつ、
性能がほしいときに、DAO(JDBC直)って使い分けてる。
197デフォルトの名無しさん:03/05/29 15:54
漏れも>>184同様、Tutorialの次に何をすればいいのかわからん...。
自分のプロジェクトはどう作っていけばいいのかの話の説明がないような?
199デフォルトの名無しさん:03/06/14 10:35
すいません、皆さんヒントだけでも教えてください

簡単な例で説明します。
社員の出勤表があります。
テーブル名はもちろん社員番号で割り振っています
カラムは[日付、その日の成績、出勤時間、退勤時間]
(実際には、10項目ぐらいカラムがあります)
となっています。
で、当然同じ形式で社員の人数分あるわけなんですが
このテーブル全てをマッピングしようと思い、
トルクとか使おうと思ってるんですが、
テーブル名ごとにマッピングのクラス書かないといけないんですかね?
いままでJDBC直のばあい、入力した社員番号から
テーブル読み出せるんですが
トルクとかのラッピングツールはテーブルごとに
クラス作りますよね?社員全部のクラス全部作らないといけないんでしょうか;

あとは、テーブルの合成も考えました。カラムは今までのやつ+社員番号が
入るカラムを追加して(重複許す)全部一つにまとめるって言うやり方です

でもできれば社員ごとに一個ずつテーブル設けたいのです
なんか、うまいやり方ありませんか?
200184:03/06/14 11:13
>>198
むやみやたらにいろいろと実験したら何となく使えるようになったヨ。
でも今のプロジェクトではC#を使っている罠(w
>>199
テーブル設計が激しく間違っていると思う
>>199
社員ごとにテーブルがあるってこと?

それがそもそもありえない。
RDBMSの勉強からやりなおした方がいいんじゃないの?

203デフォルトの名無しさん:03/06/14 11:28
>あとは、テーブルの合成も考えました。カラムは今までのやつ+社員番号が
入るカラムを追加して(重複許す)全部一つにまとめるって言うやり方です

このテーブルを最初っから作ればいいんじゃないの?
粗度が細かすぎるよねその設計だと・・・・
204デフォルトの名無しさん:03/06/14 11:33
>>201-203
レスありがとうございます
すいませんDBの勉強しなおしてきます
ちなみに私が設計したわけではありません;;
なので、とりあえずデータ構成の変更を要請してみます
ありがとうございました
>>204
だれの設計かは知らんが、もし先輩社員の設計ならば
職場を変えたほうがよいかも。
206デフォルトの名無しさん:03/06/14 13:00
>>205
ありがとうございます

いちおう、再設計を任せてくれそうになりました
社員番号と日付を複合キーにして>>203の言うようにしたいと思います
ただ、テーブルの行数が多くなりますが
dbの設計って言うのは何千行でも何万行になったとしても
こういう作り方をした方が良いのでしょうか?
聞いたところによると、最初の設計者が
あまりひとつのテーブルに行が多いとダメ見たいなことを言ったらしくて
そういう使用になったそうです
いちおうオラクル6なんですがオラクルなら何千何万行でもOKですよね
207あぼーん:あぼーん
あぼーん
>>206
まずはその最初の設計者を殺しましょう。

Oracle(というか最近のフリーのRDBもふくめて)でシステムを組んでて何千何万程度のレコードを心配するなどありえない。

>206
君の会社すさまじくレベル低いよ。大丈夫か?
DB設計の初心者本で正規化について勉強しとけ。

技術力低い分、特定業務に特化しているのだろうから、そのあたり盗んどけ。
自分の思い通りにプロジェクトを進められるのも、
小さな会社の利点だから、いろいろ挑戦してみな。
ある程度力つけたら転職しよう。
210デフォルトの名無しさん:03/06/14 13:53
>>209

言い忘れていましたが、私の会社は基本的には
そういう開発の会社じゃないんです
つまりその、皆はっきり言ってプログラミングとかそういうことは
ド素人でして今回私が抜擢されたのもただ単にちょっと知識
あるからという理由です
自社で済むことは自社内でって言うやり方でして・・・
なので、そのプログラム作ったからといって給料とかupされるわけではありません;;
実際にはセールスが本業なもので・・・
とにかく、後継に迷惑かけないようにしっかりしたもの作ります
転職ですか・・・プログラマはわたしは無理ですね
ココに質問する時点でセンス無いと思ってますから
>>210
逆にそんな立場でTorque使おうって技量に感心。
素直にそう思った。エンジニアじゃないのね。
212209:03/06/14 14:20
なるほど、社内のシステム部の人か。

少なくともRDBの基礎は学んでおいたほうがいい。
あまり良書とは思わなかったが、入門テキストとして、
「データモデリング 基礎講座」
http://www.seshop.com/detail.asp?pid=1401

最初からしっかりしたものを作るのは不可能なんで、
何度か作り直すつもりで、気軽にね。

自社で開発するにしても一人ぐらい社外の人を入れないと無意味だと思う。
顧客と開発が近いのは利点だけどね。
とりあえず、何かの結果を求める時に、そこに必要な全てがどんな階層(関連)になっていれば
扱い易いか考えてみ。(それを徹底的にやるのが正規化)

[社員の給料]←[社員の特定]←[部署の特定]←[会社全体]

みたいな。簡単で申し訳無いけど。
214デフォルトの名無しさん:03/06/14 15:43
>>211
Javaなら知っていたので「それでよければやりますが?」
といったら、「じゃ、君やりなさい」と言われました
自社のポータルも私作ったんですが
DB関係はまったくの初めてなのでどうなることか・・・

>>212
システム部といっても私一人ですよw
そういう部署設けるぐらいの会社なら
最初から外部に頼んでますよきっとw
リンク先覗いてみますありがとうございました

>>213
ありがとうございます参考にさせていただきます
215213:03/06/14 15:58
あ、ちなみに一人で作業するとなると、必然的に脳内で「一人会議」とか「一人ミーティング」とか
する事になると思うけど(笑)その時にはきちんと"全体設計"、"DB設計"、"コーディング"とか、
各フェーズを明確に分けて考えた方がいいよ。それぞれの担当になったつもりで。
その方が完成までの期間とかの見積もりも出せるし。

今回の件では、やりたい事は明確になっているんだろうから、とりあえずDB設計が先か?
その設計次第でコーディングの内容も変わるだろうし。

とりあえず、概算見積もりにはいつも10%上積みの方向で上司に報告っと。(笑
216デフォルトの名無しさん:03/06/14 18:18
正直、その技量でTorqueに手を出すと悲惨なことになると思う。

Torque自体のドキュメントやツールがロクに整備されていなかったり
チュートリアルと実際の動作が異なる場面が多かったりなので頑張れ。
217デフォルトの名無しさん:03/06/14 18:35
俺もTorqueはちょっとどうかなーと思う。
まだCastorの方がいいかも。
XMLとの親和性もいいしね。
なんならRelaxerという手もある。
218デフォルトの名無しさん:03/06/14 18:51
ORACLEのBC4Jってどうなんだろ?
JDeveloper高いけど・・・。
>>206
なんでOracle6なんだってつっこみはなし?

あと、さすがに数百万行とか数千万行になるようなテーブルとかならデータ量は気にするよ。
でも、こんなの出てくる場面がかなり限られるので気にしないほうがいいね。
220デフォルトの名無しさん:03/06/21 21:39
HYBERNATE使って開発してるんだけど、SQL組み立てて
直接JDBCに流し込んだほうが効率いいんだよなー。
それでもプロジェクトで使うって決まってるから使うんだけどね。
レコードをオブジェクトにして、getsetでデータを加工する。
だから件数が多くなればなるほど処理時間が長くなるし、JVMのヒープも
多めにとっとかないとパンクする。
プログラム組んでるとJavaって感じよりCOBOLって感じがする
COBOLもSQL組み込めるけど、Keyをセットしてデータを取り出すって手法似てる
って意味です。
221デフォルトの名無しさん:03/06/21 22:36
だれが、SQLラップしようとしたのだろう?
SQLと、プログラムのロジックの記述を
うまく組み合わせることが出来ていたのに
なぜわざわざ。。
仕方ないからやってるけどさ、
逆に、カラム増やすことになって困るのは
CMPや、Torqueのほうだってことだよ
俺個人のプロジェクトのとき
頻繁にテーブル構成変えることあったが
SQL生だとすぐに移行できるが
CMPとかだとちょっとね・・・
動き出すまでに、1時間ぐらい躊躇う
禿同
漏れもSQLを生成させて実行、その後はResultSet、
もしくはVectorを返して扱った方がいい。
更新系もSQLを生成してExecuteでぶち込む。
そういうメソッドを持ったクラスの方が
テーブルマップドクラスなんかより
よっぽどビジネスロジックに即している。

SQLについては、ビューやストアドを
使ってシンプルにさせることは
追求しなければならないと思うけどね。
223デフォルトの名無しさん:03/06/21 23:23
禿同
だいたい、JavaにおけるDBのラッピングなんて
JDBCドライバで十分だよ
それにいまのJavaプログラマは
環境依存になるととたんに触手を引っ込める
DD書くのも環境依存なDDが必要になると
いやがるな。まあ、それは俺もそうなんだが・・・
あと個人的な意見では、>>222も書いてるように
SQLの使い方、ストアドの使い方その他もろもろの
細かい設計までやれるのはとても興味深い
パフォーマンスも追及できるしさ・・・
まあ、仕事では再利用性などを考えて
クラスの数が多くなってもいいからデザイン優先じゃない?
まあ、仕事だからやってるし勉強するけど
おれは、今のこの現状を少し遠目に見ている
実は俺もうすうすそう思っていた。
DBとオブジェクトのマッピングは、所詮
不毛な努力なんじゃないかと。
そういいつつも、何かうまい方法があるんじゃないかと、
つい方法を追ってしまうのだよねえ。
225デフォルトの名無しさん:03/06/22 01:29
だいたい、DB相手のEJBやってるとさ バカらしくなってきちゃう
だって、そのままSQL発行すりゃーいいのに
わざわざ、オブジェクトにsetで格納して
向こうに届いたら、getでとりだしてデータベースにインサート
どう考えても二度デマだろ?
向こうで取り出しやすいようにオブジェクトの
構造もワザワザ考えなきゃならんし・・・
DBからデータ取り出すときなんて、
余計なカラムまで取り出したくないのに、
プログラム的には一度に取り出したほうが楽なので
不要なデータも取り出してしまう・・・
しかも、コレクションで帰ってくりゃ
イテレータで取り出し&キャスト

SQLなら他のUtilクラスにPreparedStatementのSQL文を
static フィールドで保持しておいて置けば
意外にコードはすっきりだ
ストアドもそう。
だいたい、SQL直ってそんなに難しいか?

226デフォルトの名無しさん:03/06/22 01:35
まあ、一人で開発している分にはSQLを直接書くのもいいだろうな。
227デフォルトの名無しさん:03/06/22 01:38
>>189

無意味な事してんな(w

インデックスの張り方とかテーブルの列の順序とかstmt、rsのCloseのタイミングとかは?
>>226
SQL知らない奴らと一緒にやってると大変だよな。
229デフォルトの名無しさん:03/06/22 02:44
SQLなんてどうせ基本しかつかわんだろ?
おれなんてSELECT UPDATE INSERT DELETE
FROM ORDER BY ぐらいしかつかわんぞ
あとは、データとってくればこっちで何とかするやり方だよ
ストアドだってその場その場で本開けば解決できるしよ
なんか妙に一理あるな<マッピング不要論

結局俺もJDBC直でやっているわけだが理由は結局O-Rマッピングがかったるいから。
でも、JDBC直だといまいちだなと思うこともまた事実なわけよ。結局Javaの世界
ではやっぱりObjectで扱っているわけだがResultSetからObjectへの変換および
その逆がうざい。かといってODBはよくわからんし。
231230:03/06/22 03:43
でさ。ふと思うわけよ。理想的なObjectの格納方式ってなんだろうって。
結局

(1)オブジェクトをなんでもかんでも叩きこめる
(2)問い合わせ言語が存在し必要なオブジェクトがひっぱりだせる

の2条件が成立すれば良い訳だ。なんとなくxpath + XMLDatabase + relaxer
でよさげなのが出来そうだな。
232デフォルトの名無しさん:03/06/22 03:46
俺が最初DBのマッピングって聞いたとき
オブジェクト投げたら勝手にインサートしてくれるものだと思ってた
たとえば、JavaBean同様にアクセサのあるクラスで
それに加えて内部に情報フィールド持ってて
たとえばデータソースURIやユーザ名パスワード
(この辺はプロパティファイルから読み込みでも可)
でもって、
#insert(Object obj)
とか何とかやれば、自動で内部のフィールドを取り出して
自分でSQLを吐いてくれるやつだとおもってた・・・

Torqueぐらいのマッピング程度ならいままで書いてますよね皆さん?
SQL文発行は一部のクラスに追いやって
そのクラスに対して
insert(String[],int,int)や
select(String tablename,String columnname)
とか言うメソッド作ったりしてませんでした?
俺にとってはなんの新鮮味もありませんでしたよ
233デフォルトの名無しさん:03/06/22 03:50
>>231
すれ違いかもしれんが
おれ、いまXQueryって興味あるんだけど
XMLデータベースサーバーって
どっかにFreeのやつない?
俺が探して見つけたのは有料なんだよなぁ
いまは、え〜と名前忘れたが
@ITとかで落としたソフトのライブラリ使って
Javaで遊んでいるのだが・・・
>>233
XindiceってApacheのXMLプロジェクトじゃなかったっけ。
XMLデータベースって、どうやって性能出すんだろ。
挿入と、複数条件検索がコストでかいがするんだが。
インデックスをノードのプライマリキー以外に張ると
エライコトになりそうだし。
XMLデータベースと入っても、ストレージのフォーマット
実装は、XMLとは直接関係無いスタイルにしないといかん
ぽな気がするな。

詳しい方、無知なオイラにおしえてちょ。
マッピング不要論が色々と出ているわけだが、
SQL直書きだと、オブジェクト指向のメリットであるところの
ロジックの局所化が生かせないような気がしなくもない。
ユースケース単位でがしがしSQL作っていると、
いろんな機能にSQLが散らばってメンテナンス不能、みたいなことには
ならないでしょうか。
SQL直書き派は、その辺のところどうやって解決してますか。
>>235
やっぱインデックスとキャッシュなんじゃない。
あとは問い合わせ言語の最適化とかのアルゴリズムとか。
238デフォルトの名無しさん:03/06/22 07:02
最初は面倒だけど、なれてくると、
あとで拡張するときとかめちゃ便利だよ。
Torqueつかってます。
>236に同意。
SQLはプログラムから見ると単なる文字列リテラルでしかないのでロジックとの結合がぜんぜんない。

例えばResultSetから取り出すときに型を間違えてもコンパイラはぜんぜんわからない。
これがマッピングされた環境だとそんなタコミスは即座に判明し、テスト時間も大幅に減らせる。
最悪テーブルの構成が変わったときなど、SQLだとgrep→SQL変更→ResultSet関連変更などなど件数が多くなるほど悪夢のような作業が発生するが、
マッピングされているとその変更の手間は局所的に押さえることができる。
(´-`).。oO(不要ならばここで述べた理由をいえば上司を説得できるだろうに。。。。。
241230:03/06/22 12:37
>>233
>>234もレスってるがXindiceがFreeで使える。ただXQueryはまだ実装されて
いない模様。

Apache Xindice XQueryはまだサポートされていない模様
http://xml.apache.org/xindice/

Xindice:無料で使えるXMLデータベース
http://www.atmarkit.co.jp/fxml/tanpatsu/18xindice/xindice01.html

>>235
XMLデータベースを使用する時って現状だと性能はあんまり関係ない場合に限
られるんじゃないかと思う。XMLデータである限りその分のオーバーヘッドは
どのみちかかるしな。今のところそれなりのデータ量があるようなプロジェク
トで使う気にはなれないな。

ただ、将来的には面白いと思って見ている。Object<->Relationalの変換を
考えるから色々問題が発生するんだよ。それなら根っこから変換不要のデータ
保持形式を考えてみるのも面白いだろ。
242デフォルトの名無しさん:03/06/22 14:43
>>233
eXistはどうよ
(´-`).。oO(だからうちは使ってないけど。。。。。
「データベースシステム」
を構築しているのか
「Javaアプリケーションシステム」
を構築しているのか
そこら辺の違いだな。
245デフォルトの名無しさん:03/06/22 20:28
SQLゴリゴリ派ですが、
メンテナンス性とかより
学習コストがかかるから避けるっつーのはおかしいかな。
もちろん、プロジェクトメンバー数分ね。

ODB技術全般的にドキュメント類が整備されてないし、
バグもあるだろうし、「なんでできないんだー!」で
結構時間食ったりする。

外部結合とか○○ができないから、そこんとこは
JDBCでよろしくね。なんてことになったら
それこそ、メンテナンス性なんてあったもんじゃない。
実際、システムを保守する人も開発メンバーとは限らないしね。

あと、Strutsほど導入メリットもなく、枯れてないしね。
>>245
それはよく分かる。
RDBのオブジェクトマッピングは、まだ設計技術が
成熟していないような気がするので、
うかつにやってしまうとかえってメンテナンス性が落ちそうな気がする。
この分野はまだまだ試行錯誤の期間が続きそう。
なんか、Strutsとか出る前に、Servletに直接ビジネスロジックを
ゴリゴリ書いていた時代を思い出す。
納期がやたらと早いプロジェクトとかだと、導入リスクが高いので、
SQLゴリゴリの方が、メンテナンス性(メンバーのメンテ能力っていう意味でね)
は高いような気がする。
247デフォルトの名無しさん:03/06/23 00:03
.NETのSqlDataAdapter や PowerBuilderのdatawindow のような、
クエリをクラスにカプセル化するような方法は一般的ではないのでしょうか?
そっちのほうがずっと抽象的な扱いができると思うんですが。
そう思って、SELECT文を記述したXMLからResultSetのラッパークラスを
生成するプログラムを作り中。
248_:03/06/23 00:03
249デフォルトの名無しさん:03/06/23 00:07
>>247
SqlDataAdapterはとてもじゃないけどカプセル化されてるように見えない。
糞VB再現って感じだなー
250247:03/06/23 00:15
ちょっと知ったかぶってしまいました。
SqlDataAdapter って3日前に知ったばっかりでした。
251239:03/06/23 00:31
>239といいつつ、実はTorqueのCriteriaクラスのタコさ加減にかなり萎えて
Torque採用状態からSQL直書きに方針を戻してしまった経験がある…。
.NetのDataAdapterはインターフェースみたいなもんで、
それ自身は何もしてくれない。
DELETE INSERT UPDATEなどの、SQLは自動生成もできるが、手書きが基本らしい。
それで、こいつを経由してDataBaseのメモリーコピーをDataSetというものに入れる。

DataSetに入れてしまえば、DataGridなどのGUI部品と連結ができる。
並び替えやページングのイベントが定義されてるので、
そこにちょこっと、コードを書いてやれば、並び替えやページングのできあがり。

VB厨の俺には小難しくてよく分からんです。
今はEmployeesなどのテーブルクラスと、Employeeレコードクラスを作って、
Employees#selectでEmployeeオブジェクトをhashmapやCollectionに入れてます。
どうやって、DataSetに移行しよう、、、
253デフォルトの名無しさん:03/06/23 03:54
>>247
いやだから、ResultSetをラップするまで行かなくても
SQL文の発行を一部のクラスに追いやることぐらいできるでしょって
言ってるわけさ俺は
そういうクラスを自動で作ってくれるのがTorqueだと俺はおもってる
厳しく言えば、ただそんだけってこと
なので、いままでクラスの設計で半ラッピング状態で
やってきた俺にとって、わざわざTorqueその他のラッピングつーるなんて
使う意味ないねってことよ

>クエリをクラスにカプセル化するような方法は一般的ではないのでしょうか?
これこそオブジェクト指向でないの?



254そんな低レベルな話よりも:03/06/23 04:26
SELECTを外に追い出す行為はあまり好きではない。
やはりソースが分かれると可読性が下がると思う。
256デフォルトの名無しさん:03/06/23 12:42
俺はCastorやHibernateにTorqueのCriteriaっぽいクラスをかぶせて
使うようにしているので、「東京都に在住のユーザー一覧は以下の
ようにして取得してね」みたいな指示だけ出すようにしてる。
プロジェクトメンバーのメンテナンス能力は別に気にならないなあ。

Pref tokyo = PrefManager.fetchPref(13);
UserCriteria uc = new UserCriteria();
uc.setPref(tokyo);
ArrayList users = UserManager.fetchUsers(uc);
すれ違いだけど、漏れははSQLのラッパーより、
htmlの特にtableのラッパーが欲しい。
JSPで書いてもhtmlとjavaコードが
乱立するし、書いていて非常に不毛に感じる。

細かな設定のできる(例えばカラーで極細の罫線の代わり
をさせたりする)クラスライブラリないかな。

やっぱ、自力で専用ライブラリつくってるのかな。
>>257
普通にカスケードスタイルシートかけばいいだけでわ?
>>258
ゴメソちょっと、舌足らずだった、
tableを生成するのに
(行追加とかcolspan,rowspanや、極細罫線とか)
ラッパーメソッドで細かな設定
ができるクラスライブラリがないかなと。
>>259
明確にほしいものができてるみたいだったら、タグリブを自分でつくれば?
>>259
http://jakarta.apache.org/ecs/index.html
こーゆーのではなくて?
なので、みんな独自の汎用ライブラリを
自分で作っているのかなと聞いてみた。
やっぱ、260も作っているの?
(SQLまでもラップするのがあるのだから、
こういうのもあってもいいのかなと思ったわけ。)

Javaコード内で枠だけ作ってさらにコード内で
値をいれたりとかね。
作っても(つくれるかな?)いいけど
その時間があれば、ベタで書いた方が早いかな...
>>261
そうそう、こういうのです。
今、ちらっと見ただけですが、
試して遊んでみます。
ありがとうございます。
>>262
俺はそこまでのヤツは必要になったことがないから作ったことはない。

が、必要になればまずは探す。
なければ仕方がないのでつくる。
>>261
ECSって使いどころが微妙じゃない?
266261:03/06/25 22:11
>>265
微妙というか殆ど無いと思う。俺は使いどころイマイチわからん。
ただ、モノ自体は面白いと思うし、将来的には使い道出てくるかもしれないし。

漏れは259が問題にしてるタグとスクリプトコードが混じったりするのは平気。
というかこれからはjellyっスよ(藁
jellyって実際どうよ?何かまだまだって気がするんだが
情報激しくキボンヌ
>>267
俺もまだまだだとおもう。
ただmiddlegenとかxdocletとか見るにつけ、そういう流れはあるんだろうなーとか。
将来的にORマッピングの強力なツールとなるかもしれない気がする悪寒。
んであとはmavenな。jelly採用してるし、mavenがブレークすれば
ついでにjellyもブレークするんではなかろうか?って勝手に思ってる。

情報はぜんぜんないね。英語の情報もあんま無いし。
1.0リリースするまではCVSでソースとかテストケースをウォッチするぐらいしか
なさそう。テストにあるjellyスクリプトが一番参考になるんじゃないかなぁ。
でもまだタグライブラリの方は動かないの結構多いけど(w
>>268さんくすこ
jelly興味はあるんだが取っ付きがなー
270デフォルトの名無しさん:03/07/12 08:25
今更でスマソが、O-R Mapping Frameworkの利点をRDB厨の私に分かりやすく
説明してもらえる情報源ってないでしょうか?
SQLを知らないJavaPGでも開発できる!
→RDB使うんだからSQLぐらい勉強しろよ!
物理設計が省力化できる!
→RDB使うんだから物理設計ぐらいちゃんとしろよ!
 というかE-R系ツールでも結構できるのに。
SQLだと保守性が悪い。
→そのためのドキュメントやん。複雑ならストアドも併用しる。

というわけで、Torqueの特集記事をJavaWorldやWebDBPressで読んだのでつが、
利点が全く理解できないのでつ。
でもJDOは勉強しようと思ってる...
>>270
SQL云々かんぬんでなしに、オブジェクト指向における永続化層を自作しなくてよいという話。
これだけでバグと単体テスト工数が3分の1ぐらい軽く減るだろ?
272270じゃないよ:03/07/12 09:55
>>271 横レスすまん
つまり、きちんとしたオブジェクト指向による設計を行えば、オブジェクト-DB間の
コードは大体似たようなものになる(というかワンパターンになる)から、そこを
自動生成できるようにします、というのがMapping-Frameworkのコンセプト、という
ように捉えたんだけど、合ってるかな?
273271じゃないよ:03/07/12 12:25
>>272
SQLとJavaはその設計思想からして違うものだからレイヤーとしてO-RMappingを使用して
DBとJavaの層を接続しようと。

EJBなんかもその一部だよね。
274デフォルトの名無しさん:03/07/12 20:57
>>270
単純に、

Person p = new Person();
p.setName("お前");
db.save(p);
Person p2 = db.retrieve(Person.class, "お前");

こういうコーディングができると楽じゃない?
275デフォルトの名無しさん:03/07/12 21:05
>>274
じっさいそういうことやってんだが
絶対にキャストが絡むよな
せめて見えない位置にキャスト隠して欲しい
276デフォルトの名無しさん:03/07/13 05:51
>>275
無理でしょ。ユーザが勝手に定義したクラスの型で返すメソッドを、
どうやってライブラリ内部に作るのよ?
>>276
んー。JavaBeansという前提ならばBeanUtilのcopyPropertiesみたいに
リフレクション使えばなんとかなると思うし、実際そうしていると思うんだけど。
>>277
ユーザが指定したクラスの『インスタンス』は返せるけど、
ユーザが指定したクラスの『型』では返せないでしょ。
インスタンスは動的だけど型は静的なんだから。

>275 はそこにキャストが入るのがいやだといってるということだと思う。
でもラッパーかませばいいだけの話だと思うけど。
あるいはコード生成機能をするようなやつならそこまでやってくれる可能性がある。
>>274-278
素朴な疑問ですが、そういう風にobject風味になればなるほど、保守できる人材
が減ると思うのですが、皆さんの周囲はその議論レベルは理解できる人たち
ばかりということなんでしょうか。
280279:03/07/13 12:46
つまり、>>274のコードにキャストが絡んだものがエンティティ分だけあるとして、
本当にSQL直打ちより保守性が上がるのかなと思ったので
それ(保守性を上げる)にはかなり工夫が必要だと思い、
その工夫を理解できる人材がどれだけいるのか?と思ったので
使ったことないけど Relaxer みたいにテーブルから自動生成するのもあるよね?
ああいうのはどうなの?
>279-280
あちこちにSQLがちりばめられた状態で、
読み込むテーブルのWHERE条件の変更があったりした場合のことを考えてみそ。

下っ端にSQLなぞ書かせたくないというのもあるな。
複雑なSQLと複雑なコード、どっちがデバッグしやすいかとかも。
283282:03/07/13 18:14
キャストに関しては、Employees(もしくはEmployeeCollection)クラスを
作っちまえば解決。
284277:03/07/13 19:17
>>278
俺には型にこだわる理由がわからん。
たぶんコンパイル時にタイプセーフが保障されるのを期待してると思うのだけど、
O-Rマッピングに関わらずそれはJavaでは難しいと思う。いまのところ。
Java1.5のGenericに期待っつか。
285271じゃないよ:03/07/13 20:55
>>279
逆だな。
Javaのコードの中にSQLといった別の言語が入り込むほうが保守の手間はかかる。

かからないと思っているのは今までの作り方がそれだけであったからそういう思いをしてしまうだけだと思う。
つーか、元々レイヤーが異なるものなのだから分離するのは自然だと思う。
287274:03/07/14 04:00
俺は単純に「他人の書いたSQLは読みたくない」が「他人の書いた
Javaソースなら読んでもいい」と思ってるから、現状でもそんなに
不満は無いねえ。

>>275が書いていたキャストの問題はユーザー定義クラス毎に
ラッパークラスを生成するようにしているから、別に意識してない。

Person author = PersonManager.retrieve(personId);
Book book = new Book(title);
book.setAuthor(author);
BookManager.store(book);
288_:03/07/14 04:02
>>287
スレ違いの指摘だが、そういうのはラッパーと呼ばずファクトリと呼ぶ。
290274:03/07/14 15:54
>>289
そうか、そう言われてみればそうだな。
CastorJDOやHibernateの上に被せて使うんでラッパークラスということに
してしまっていたよ。
291sage:03/07/14 17:26
CMPにしてもO/Rツールにしても、制作や保守効率は
上がるけれども、どうしても実行パフォーマンスが
自分でSQL書いてJDBCやる場合よりも劣ってしまうのが
難点。(勿論シンプルな問い合わせなら変わらないけど)

O/Rツールを導入して、取り扱いデータが結構増えてきた
段階でこのことに気づいた。まぁ、最初にちゃんと
検証しておかなかったのが悪いのだけど。
生成されるSQLが効率的なものかどうかは導入前に
ちゃんと確認しておくべきだね、当然なんだけど。
292291:03/07/14 17:27
sage間違えた。
いくつかいじってきましたが、結局の所、WebObjectsが持つEOFが一番ラクだし
融通きくし、安定してると思ってる…
実際、ORマッパー書けばわかるけど
ORマッピングツールって別にSQLを簡単に書くためのツールじゃないんですよ。

将来、RDBMS以外に永続化しよーってときに効くツールなんですよ。
そんな実装は一生ありえなさそうですけどね。
>>294
XMLDBって最近名前は聞くようになってきたことない?
296fusainasan:03/07/14 23:12
>>293 あ、漏れ、マカーなんだけど。
WebObjectで構築されたと統合2ch型掲示板システム「VanquishBBS」
http://web1.aaacafe.ne.jp/〜tetsuyak/cgi-bin/WebObjects/VanquishBBS/index.html
EOFとか熟知している人が作るとこういうもんもができあがるらしい。
掲示板なのに負荷分散とかヘーキでしやがる。WebObjectってこういうのカンタンなの?
297fusainasan:03/07/14 23:13
しまった、マカーなんでサファリだと〜が全角になっちまうんだ(´Д`;)鬱...
>>296
WOでなくてもそういう風に作ろうと思えば出来る程度のことだと思うが。
掲示板程度で開発生産性や負荷分散云々は多分比較するほどの差はつかん
と思うよ。別にAP鯖で負荷分散しなければならんということでもないし
【簡単】の定義も様々だと思うしな。ちなみに漏れは元WO使い。今は使わん。
299山崎 渉:03/07/15 09:40

 __∧_∧_
 |(  ^^ )| <寝るぽ(^^)
 |\⌒⌒⌒\
 \ |⌒⌒⌒~|         山崎渉
   ~ ̄ ̄ ̄ ̄
300デフォルトの名無しさん:03/07/15 16:48
WebObjectsってアプリケーションをクラスタリング構成にするのが
容易なのがウリじゃなかったっけ。
ウリナラマンセー
302デフォルトの名無しさん:03/07/15 20:46
>>298
掲示板といえども、2chやYahooぐらいの規模になると、アクセスがグッと集中した時とか、
鯖が負荷に耐えられないってことあるじゃん。そんなとき、負荷分散構成になっていて、
30台のサーバーで一つの掲示板データをやりとりできるとなると、
少なくともユーザはイイ思いできると思うんだがなぁ。

証券関連のシステムなんかだとそれがよく実感できるのだが、掲示板でも同様のような気がするんだけどな。
1台の高価・高速な鯖で動かして大量のトランザクションを裁いたとして、鯖が何らかの原因で落ちたときを
考えると負荷分散のメリットは大きいとおもうのだが。
>>302
もまいが言ってるのは負荷分散じゃなくて高可用性だな。
目的が違う。

負荷分散のためのオーバーヘッドって結構あるよ。
それはわかってるかな?
>>303
アクセス集中時も想定してるから負荷分散でもあってんじゃない。
一台が同時にさばけるリクエスト数とかも、ある程度決まってるわけだし。

でも分散環境で掲示板のデータ保存にDB使うと大変だろうなぁ。
最低限クラスタするにして、DBだけで相当な値段がいきそう…
305298:03/07/16 00:15
>>302
WOだからどうこうって話じゃねぇだろ?ってことを言ってる。
証券関連が云々というが漏れも証券のネットトレーディングの開発
やってる。だから、はっきりいう。掲示板程度では何を使っても簡単の
度合いはそんなに変わらん。ハードの手配で決まる話だ。
その程度でWOを引き合いに出されてもWOが安っぽくみえるだけだ。
証券で使ってるのならそこをアピールするよし。掲示板では迫力不足。
306デフォルトの名無しさん:03/07/16 08:59
>>296のHPみたけど、ハードウェアと7万ちょっとで負荷分散?JMSも使う?
しかも、たかが掲示板で?2chみたいな数百もある掲示板を1台のDBで
運営するつもりか?>>303のいうように、
負荷がおもいきりかかったときはつながりにくい・おちにくいサイトになっているとは
思うが重くなりそうな。掲示板ってレスポンス命じゃないかねぇ。1台のバカっ速い
鯖で運用させたほうが良いよな。
でも、この手のフレームワークを使った掲示板システムはフリーでは観たこと無いからポイントちょっと高いカモ。
(でもウェブオブジェクトってよくわかんない。7万だし、大したことなさそう)
WebObjectsの7万って、イメージ的に諸刃の剣だよな。
以前は700万だったから、イメージ的なありがたみ?があったけど、
いきなり7万になったら、「?」って思う。
70万だったら「ふむふむ、よさげだけど高いな」って感じか。
結局、モノは凄いのに認知されないんだよな。マイナーだし。
308デフォルトの名無しさん:03/07/16 17:10
>>306はイタイいな。
309デフォルトの名無しさん:03/07/16 18:51
>>307
>>結局、モノは凄いのに認知されないんだよな。マイナーだし。
モノのすごさを>>306のアプリケーションが証明してるとおもう。たぶん、そこのサクーシャは
WebObjectのすごさを知らしめたく、あえて掲示板というアプリを開発したのかなと妄想炸裂
させたりする。だって、ふつー、掲示板ごときでくらすたりんぐしねーもん(w
すごさをアピールしようとして掲示板システムを選び、
その必然性の無さがアピールされてしまってシパーイ(w
いや、EOF最強なんだけどさ、ツブシが利かねんだよね。
311fusianasam:03/07/16 19:32
>>310
必然性がないから、フリーでばらまいていると思う。これでビジネスやろう、なんて人は無いと思うが(w
サクーシャもそこらへんわかってんじゃないの。別にクラスタリングが必須というワケでもなさそうだし。ただその機能もサポートしてるってだけでしょ。
EOFがツブシきかない、というのは、ADOだってJDOだってEOFと同じ道具のウチの一つだから、ツブシきかない、といえばきないような。
掲示板だったらPHPとかPerlなんかで十分。2chぐらいの規模・アクセスだったら考えるけど。
でも、WOは、技術的メリット以前に、知名度も低いし、
EJB/Servlet&JSPコンテナとして使うとWOらしさが引き出せない。
んで、顧客へのアピール度も低いんだよな。
USはうまくやってるけど、日本じゃ無理だろ。
313fusianasam:03/07/16 20:01
漏れの所は知名度なんか関係なしに、
いくつか製品を評価して最終的にWOにしたな(金融系をメインでやるSIerなんだが)。
他SIerとのコラボはめったにないし、、、まぁ、環境によりけりってところかなー。
確かに便利だよ。EOFってーのは。これぐらい独自性があるとパテントぐらいあってもいいんじゃないの?
EOFは、確かパテント取ってるはず。
またそんな出鱈目を。マカーの妄想ですか。禿信者はこれだから困る。
いつもはじめじゃないといけないコンプレックスの固まりだな。プッ.

マイナー製品がパテントとるわけないだろ。ましてやアップルだぜ。おまえら正気かよ(w
何も知らないアフォが吠えてるな。
信者マカーは、EOFなんて知らないんじゃねーの?w

EOFがパテント取ってるのは相当昔じゃなかったっけ?
10年くらい前からある技術だし。元々はNeXTの技術。
段々スレ違いでスマソが、俺も>>312に同感だ。
WOが幾らいいソフトだろうが、幾らWOに詳しかろうが、それだけじゃ現状では
Web開発者としての市場価値は??じゃない?
WO好きなら趣味でやるのもいいだろうが、趣味のWeb開発なんてそんなにやる
もんじゃなし。というわけで俺は普通にJ2EEに乗り換えたよ。
318デフォルトの名無しさん:03/07/17 00:05
フレームワークの価値は、「適度に広まっていて、イザ新規開発あるいは
既存システムの保守をおこなおうというときに、技術者の教育コストを
無駄に抱えないで済む」ことに真骨頂があると思われ。
ある程度開発者が集まるならば、そいつら集めて作らせればいいだけ。

そういう意味で、マイナーフレームワークは存在価値が微妙だし、俺様
フレームワークは無価値。大体同じようなことをやってくれるなら、多少
欠陥があろうとデファクトを使うほうが、お客さんのためだろう。

技術者の興味のコストをお客に押し付けるのは犯罪的だと思う。
319デフォルトの名無しさん:03/07/17 08:26
>>技術者の興味のコストをお客に押し付けるのは犯罪的だと思う。

激しくムカつくセリフだが間違ってない(;´д`)
>>317
漏れ、運用屋やってるんだけど、WOを動かす鯖を預かる事例が、今年に入って
急に増えてきたよ。マジ妄想じゃなくて。需要っつうか、使ってるところは
増えてきているんじゃないの。中には1/2埋めるところもあったし。
321デフォルトの名無しさん:03/07/17 12:53
なんかスレ違いになってきたヨカン
とりあえず、WebObjectsに特化した話題はスレ違いだ。
以後、こっちでヤレや

WebObjects nsDictionary.valueForKey("5スレ");
http://pc2.2ch.net/test/read.cgi/php/1044328908/
そのAppleが10.3にはJBossを入れるらしいね。
プリインストールなのかCD-Romに入ってるだけなのかは
知らないけど。

JBoss4では独自のJDO実装もできてるね。EJBとどっち
使えばいいんだろう?
お。なんだ、専用スレがあったのか、サンクスコ
bc4jに関するコミュニティーて一つもみつからないんだけど
どこかにありますか?
>>325
君が作れば誰かは集うよ。
327デフォルトの名無しさん:03/07/24 13:10
bc4jって何?
>>327
Borland C++ Compiler Ver 4.0J
Jは日本語版の意味だろうね。

面白すぎて腹痛いからWhiteSpaceでも一人でやってろ
JDO実装ってjdocentralに載ってるのと↓にのってるプロダクトでほぼ全部ですかね?
http://pnuts.org/wiki/index.pnut?language=ja&name=JavaDataObject
今更でなんですがJavaPressの最新号でJDO特集やってますね。
http://www.gihyo.co.jp/magazines/javapress

立ち読みでざっとしか見てませんが、
日本語でここまでまとまった資料or特集記事って初めてのような気が。
mappingする事で、javaソースにsql文が埋め込まれていない
状態にはなりますが、
いくらmapping-frameworkがすばらしく設計されていたとしても、
アプリケーション全体をオブジェクト指向の視点でみると
不自然な設計になりませんか?

たとえばアプリケーションの固定値(環境変数等)をDBで持っている場合、
自分は固定値を管理するクラスをつくろうと思いますが、
何らかの形でDBアクセスするためのクラスを渡す機構が必要になるでしょうし、

単純にユーザIDが1番のレコードの名前を変えたいという処理がリクエストを
またいでいた場合、DBアクセスを減らすためにユーザをマッピングしたクラスを
保持していなければいけなくなります。その際に自動生成されたクラスはいじりたく
ないのでラッパークラスの作成を考えてしまうのですが、
そうすると更新の時はやっぱりマッピングクラスを何らかの形で渡さなければ
いけないのであんまし意味がなくなります。

どちらにしろSQL文を埋め込んでしまうとオブジェクト指向としてはきれいな設計
になるのではないかと思います。

私は、ソースにSQL文を埋め込むのはかっこわるいと思っています。
しかし、フレームワークを使うと設計が前時代的になるのではないかと思っています。
そこがトレードオフなのかもしれませんが、

要するによい設計法やパターンがあればそれを教えて欲しいと思っています。
よろしくお願いします。
333デフォルトの名無しさん:03/07/26 04:26
おい、思ったんだけど
今俺XML関連いじってんだが
XPathとかあるじゃん?
あれも、SQLと同じだよな
あれもマッピングするって言うの出てきてるの?

>>333
XPath じゃなくて XQuery でない?
いやいや、俺の言ってるのは
XPathです /element/child[@id=01]ってやつね
まあ、XQueryでも俺の言いたいことはおなじなんですけどね

まあ普通にやれば
XPath.newInstance(
"/"
+ ROOT
+ "/"
+ NAME
+ "[@"
+ ID
+ "="
+ bean.getId()
+ "]");
という具合になっちゃうわけです
>>332
別にオブジェクト指向を追及すのがフレームワークの役割じゃないだろう。
素人が混ざっている多人数での生産性を安定的に向上させることが
目的だわな。その意味ではオブジェクト指向としての自然さを崩すことも
ありだろう。
>>333
relaxer
>>336
同意。あんまりオブジェクト指向にこだわりすぎていると
ろくなことないよね。
特にRDBとオブジェクト指向のミスマッチはいかんともしがたいので
適当なところで割り切るのが吉かと。
>>338
それ大事!
末端の人が、Javaさえわかっていれば大丈夫にしたいという事だろ?
わざわざDB毎に違うSQLをチームみんなが覚えなくてもいいと。
341デフォルトの名無しさん:03/07/27 23:33
>>332
クラスとインスタンスの区別が付いてないみたいだがそれは置いといて…

>たとえばアプリケーションの固定値(環境変数等)をDBで持っている場合、
>自分は固定値を管理するクラスをつくろうと思いますが、
>何らかの形でDBアクセスするためのクラスを渡す機構が必要になるでしょうし、

たいていのフレームワークでは、DBアクセス用クラスのインスタンスを
アプリケーション側で受け渡すような必要は無い。
もっとマシな設計になってるよ。

>単純にユーザIDが1番のレコードの名前を変えたいという処理がリクエストを
>またいでいた場合、DBアクセスを減らすためにユーザをマッピングしたクラスを
>保持していなければいけなくなります。その際に自動生成されたクラスはいじりたく
>ないのでラッパークラスの作成を考えてしまうのですが、

リクエストを跨いだトランザクションをサポートしたフレームワークなら、
自動生成されたクラスをいじる必要は無い(そのまま保持してればいい)。
それと、今時はデータオブジェクトクラスの自動生成は行わないフレームワークの
ほうが主流のような気が。
>>338
禿同。
そういえばよく日付とか扱うよな。
あれってCURRENT TIMESTAMPとか使っちゃったりしてさ。
DB中心で扱うことが多いんだけど(たまたまね。)
日付はJAVA(アプリサーバ)とDBサーバどっちで扱ったほうがいいと思う?
>>343
どっちでもいいのでは?
APとDBでサーバが違うからDBに統一はしてる。
NTP使うのもめんどくさいからな。
そうだな。どっちでもいいや。
最近多いなRDBマッピング特集。
CMP、BMPは話にならないことに気づいたか?
>>346
EntityBeanは分散でつかえる技術だとあれほど言ってるのにまだわからんのか
話を混ぜないでください
>>347
EntityBeanは、リモートやトランザクション制御できたとしても
うれしくないやろ。
つかえない技術ちゅーことが、一般的な認識になったってことでしょ。
>>348
ばかやろうばっかだな

「EJBはRDBマッピングの技術じゃない」って何回言えばわかるんだよ馬鹿
EJBはこのスレにはカンケーないんだよバカ
>>349
だからEJBを使ってそういうことをやろうとすると云々ってことだろ。

信者ウゼェよ
SessionBeanとORマッピングの組み合わせはアリだと思うんだが…
分散にも対応できるし。

EntityBeanは面倒くさいよ、なんか。
最近いろんなところで言われてるが
SessionBean+JDO
っつ組み合わせに流れつつあるみたいだなや。

EntitiyBeanは問題外だと思うけど、JDOもそんなにいいかなぁ…。
なんかどのORツールもしっくりこない。
ORマッピングツールは100%全部それでまかなえることを
期待しちゃだめなんだろうな、きっと。
60%くらいの自動生成でラクチンして、後は手書きでSQL、
くらいの心構えでやるのがよさげ。
とかいいつつ、俺は一度もマッピングツール使ったことないけどね・・・
354デフォルトの名無しさん:03/07/29 00:26
ああ、RDBを捨てられたらいいのにねえ…

スキーマの変更に強くないと、マッピングって言えないよな

今までのマッピングツールってただ単にSQL文を隠してるだけだと思わない?

そんなことさ、実際普通のプログラマはやってたわけよ

自動生成っていうのはいいけどオブジェクト指向を適用するのはソコじゃないんだよな

それからさ、データベース特有の機能使えないんだったら

プログラマーからどのDB使ってるのか完全にわからなくして欲しい


っていうか、DB側もオブジェクト指向に歩み寄ってきて欲しい←非常に重要
っていうか、DB側もオブジェクト指向に歩み寄ってきて欲しい←非常に重要
っていうか、DB側もオブジェクト指向に歩み寄ってきて欲しい←非常に重要
今時、どんなに小さいシステムでもOracle以外は認めないとか酔狂な事を言っている
企業がゴマンとあるからな。信頼性の問題云々だと。
そういう会社に限って、保守に金掛けてなかったりするんだけど。

というのは置いておいて、Oracleがオブジェクト型になれば、きっとみんなそうなるんだろ?
357デフォルトの名無しさん:03/07/29 13:02
ObjectStoreでも使っとけ。
なに?
ObjectStoreってObjectの丸投げモロ出しできるの?
いいねぇ
でも、そうなると言語間でやり取り大変そうだ

やっぱ究極はXMLが高速になれば・・・・
今Torque試してるけど、Viewと組み合わせれば
パフォーマンス的にも問題なく使えるね。

まあ、時代はJDOへと移るんだろうけど…
Torqueについて質問させてください。

ORDER BYを使ったデータの取得を行おうと思い、以下のコードを試したのですが

Torque.init("Torque.properties");
Criteria c = new Criteria();
c.addAscendingOrderByColumn(MytablePeer.Field1);
List list = MytablePeer.doSelect(c);

doSelect()の時点でNullPointerExceptionが発生してしまいました。
addAscendingOrderByColumnを使わずに実行した場合は問題なく動きますので
Torque.propertiesの設定には間違いはないと思います。
addOrderByColumn()を使った場合でも同様の現象が出ました。

DBはMSSQL2000 Torqueは3.1 OSはWindows2000です。
どなたか同様の現象がでた方いませんか?

http://www.mail-archive.com/[email protected]/msg12713.html
おそらく同じ現象かと
>>360
あなた、3月ぐらいにJakartaの掲示板に同じ質問しました?
今ググッて見たらあなたと同じような現象らしいです
その方も、同じメーリングリスト指していました
やっぱ、バグなんですかね?
何か特別な、スキーマでしょうか?
差し支えなければスキーマ定義教えてください
362361:03/07/31 16:23
追加で質問なんですが
ソート対象のカラムは[NOT NULL]定義になっていますでしょうか?
363360:03/07/31 16:31
>>361
<table name="Mytable" idMethod="none">
<column name="MemberNo" size="4" type="VARCHAR" />
<column name="GroupCd" size="3" type="VARCHAR" />
<column name="Name" size="24" type="VARCHAR" />
<column name="Y-Cd" size="2" type="VARCHAR" />
<column name="F-Flg" type="BIT" />
<column name="HolD" type="REAL" />
<column name="Mail" size="50" type="VARCHAR" />
</table>

特別なことをしているとは思えないのですが。

jakartaの方は私ではないです。
今月のJavaWorldを読んで、使ってみようかと思って。
364361:03/07/31 16:38
わかりました

私の方も>>363のスキーマ定義で
Win2000+MySQL+J2SDK1.4.1.02
で試してみます(MS SQLは持っていないので参考になるかどうかわかりませんが・・・)
Torque最近使ってないので思い出しながらやってみます
365360:03/07/31 17:56
>>364
MySQLで実行した場合は成功しました。

また上記のスキーマ定義で、MemberNoにrequired="true"を追加して
実行しましたが、やはり失敗でした。(エラー個所もいっしょ)

やはりバグですかね・・・
366361:03/07/31 18:03
>>365

やってみました
んん?
なんでかな?MySQLでエラーでたw
addAscendingOrderByColumnのとき出るね

で、おれもEclipseなんだがaddOrderByColumnのときは
「Criteriaにこのメソッド使うべきではない」と警告でます
Oracleでも出るねぇ。
Win2000+Oracle8.1.7+J2SDK1.4.2
Torqueは3.0.2だけど。
368360:03/07/31 19:36
>>366
そういえばbuild-torqueのjdbcも失敗します。
失敗というかテーブルの情報が取得できないみたいです。
(空のschema.xmlが作られる)

上記のスキーマもDBから作ったんじゃなくて、エディタで作ったやつですし。
この辺が原因かもしれないです・・・

MySQLだと問題ないですよ?4.0.2、Windows2000ですけど。
>>368
そういえばって…
370361:03/07/31 20:21
てか、torqueってcreate-dbとかもDBによってエラーになるし・・・
いったいお前らは何をもってマッピングと言っているのか?
Jakartaの中でも最悪のメンバーでやってるんだろうな
そうか、タービンから独立したわけじゃないんだ
タービンからはじき出されたのですね
>>370
とっくにJakartaからもはじきだされてますよ。
Apache DB Project
>>371
それは昇格なのか?
業務アプリをやっている香具師に聞きたいんだが、
JDOを使うと開発効率や保守性は上がるんだろうか?

...結果として一覧表的なものを求められる場合が多いので、
かえってJDOを使うと大変かと。
>>373
まだ、はっきり言って過渡期なのにJDO使うやついないだろ?
「今回は見送りましょう」ってなる
「一番インパクトのある仕様」
なぜ英語(カタカナ)にするのだ?
>>360
>>361
以前、DBAdapterの設定が間違えた時にそういう現象(ORDER BYでおかしくなる)が起きました。

生成したBase<TABLE名>PeerクラスのDATABASE_NAMEにセットされているデータベース名で
Torque.propertiesで設定するtorque.database.<データベース名>.adapterの値を設定してなかったため、
BasePeerクラスのcreateQueryやcreatePreparedStatementメソッド内の
「dbMap.getTable(table)」のコードの部分でDatabaseMapオブジェクトが取得できなくて例外(NullPointerException)がスローされていました。

「ORDER BY」以外で動くのは単に「dbMap.getTable(table)」のようなコードが他の句の生成部分で使用されていないから大丈夫なだけだったようです。

・・・こんな簡単な問題ではない?
377デフォルトの名無しさん:03/08/01 05:56
私の場合はTorqueでLimitがエラーがでてできなかったです。
んで、仕方なかったのでHibernateに乗り換えました。
日本ではTorqueが雑誌などで特集やってて人気あるけど
アメリカではHibernateの方が人気ありますよね。
378デフォルトの名無しさん:03/08/01 06:04
hibernateの方が相当いいよ
>>379
そうか、今日ちょっといじってみるから
わからんことあったら教えてね マジで
381380:03/08/01 10:04
すいません早速、Hibernateの質問なんですが
プロパティーファイルとスキーマ定義XML、スキーマのBeanクラスをとりあえず作りました
この先どうすればいいのでしょう?

インストールフォルダのbuild.xmlをANTで起動したらHibernateのフォルダできちゃった。
これってHibernateのためのbuild.xmlファイルみたいですね・・・
Torqueと同じような感じだと思ってやってしまいました

このHibernateってクラス自動生成とかっていうのはないのですかね?
とりあえず、ためしにこのままコード書いてみたのですが
Sessionはどこで取得するのでしょうか?
Sessionが無いとsave()出来ないみたいなので・・
382380:03/08/01 10:18
えーと
Sessionの取得方法わかりました

>SessionFactory sessions = cfg.buildSessionFactory();
>Session session=sessions.openSession();
これですね↑

で、いいとこまで行ったのですが
org/dom4j/io/SAXReader
これが含まれたJarファイルはどこで手に入りますか?
なんかコレが無いってエラーでます
383380:03/08/01 10:23
dom4jだからlog4jと出所がいっしょなのかな?と思って
Jakarta行って見たのですが
やっぱないですね・・・

っていうかパッケージ名なんて一意のものだから
Javaのパーケージ検索用のディレクトリサービスあってもいいと思うんだけど・・・
384380:03/08/01 10:25
あ、ありました
単純に
http://dom4j.org/
で、発見したよん
>>380
Hibernateの配布ファイルの中に入ってない?
lib/dom4j.jarってファイルがあるはずだけど。

Torqueは雑誌のサンプル読んで「これ便利か?」って疑問だったけど、
そんなにいいものなのならこれを機に試してみようかな。
386380:03/08/01 10:49
いや、もう少しなんですが・・・

「hibernate_unique_key」っていうテーブルが無いって言うエラーでます

やっぱ自動生成しないといけないんじゃないでしょうか?
おしえてください
387380:03/08/01 10:52
>>385
ありがとうございます
すんごい、バカでした僕
あれから、自分で気づいたんですが・・・
13MBのdom4jダウンロードしてしまった
なにしてんだか・・・

>>386にも書いたのですが
SQL自動生成ツールは無いのですかね?
「hibernate_unique_key」ってテーブル自分で作ってもいいんですが
どうせ、スキーマ定義わからないのでどうすりゃいいのか・・・
388380:03/08/01 10:56
一応、コレの%HOME%\demo.batは正常に動くのでデータベース設定等は正しいみたいです
389380:03/08/01 10:59
ああ、setupコマンド打てばいいのか・・・
390380:03/08/01 11:01
う〜
エラーは出なくなってプログラムは正常終了したが
データベースに書き込めてない・・・なんでだろう
391380:03/08/01 11:04
session.save(obj);
session.flush();
コレだけじゃダメなんですか?
392380:03/08/01 11:08
げー、なんか
「hibernate_unique_key」ってテーブルだけどんどん書き込まれて
肝心のオブジェクトの方のテーブルは書き込まれていない・・・なんじゃコレ
なんか380の独りチャット状態になってるな。
このままだとつまらないので情報提供。
Hibernate2のドキュメントの翻訳をしているところをハケーン。
ttp://www.ozacc.com/library/
まだ4章までだそうな。ありがたく読ませていただきます。
394380:03/08/01 11:25
>>393
ありがとうございます
いちおう、そこは参照してもらってます
いいトコまでいってるんですがね・・・
395380:03/08/01 11:36

コードの書き方は、IDEの保管機能とかいままでのTorqueとかの経験で勘で出来るんですが

肝心の作業手順っていうか作業の流れがわかりません
↑これさえはっきりわかれば何の問題も無いのですが・・・
>380
transactionをcommitしろよ

Session session = sessaionFactory.openSession();
Transaction tx = session.beginTransaction();
SomeObject object = new SomeObject();
session.save(object);
tx.commit();
session.close();
397396:03/08/01 12:09
Transactionオブジェクトをつくりたくないなら、

session.flush();
session.connection().commit();
session.close();

でも、いいぞ。
>387
SchemaExportツールは試したか?

java -cp hibernate_classpaths net.sf.hibernate.tool.hbm2ddl.SchemaExport options mapping_files
399380:03/08/01 12:32
>>396
ありがとうございます
でも、ダメでしたエラー内容も変わらず・・
エラー内容::net.sf.hibernate.HibernateException: SQL update or deletion failed (row not found)
これからデータ入れるのに「(row not found)」なんてあたりまえじゃん何だコレは・・・

>>398
ありがとうございます
SchemaExportは自分で気づいてつかってみました
で、setupコマンドは上手くいくんですが
それ以外のコマンドの使い方がわからず・・・
>>380 がんばって。参考になります。
401デフォルトの名無しさん:03/08/01 13:06
>>380
なんでそんなに手こずるのさ。

SessonFactory sessions = new Configuration()
.addClass(Item.class)
.buildSessionFactory();

Item item = new Item();
item.setName("Item name");

Session session = sessions.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
session.save(item);
tx.commit();
} catch (HibernateException e) {
if (tx != null) {
tx.rollback();
}
throw e;
} finally {
session.close();
}
402380:03/08/01 13:22
>>401
すいません
いや、ですから
コードの書き方はわかるんですが

開発の手順がわからないのです

スキーマのXML、スキーマのクラス作る
SchemaExportツール叩く→なんかしらんがDB上にテーブル出来上がってる
メインのプログラム作る
動かす
エラー::net.sf.hibernate.HibernateException: SQL update or deletion failed (row not found)
コミットのところでエラーになります
なので、もう一度一からやりたいのですが・・・
そもそも手順がこれでいいのかどうか疑問でして・・・
>>380
ttp://hibernate.bluemars.net/hib_docs/reference/html/or-mapping.html#or-mapping-s1-4
generatorの指定をidentityもしくはsequenceにするとすんなりいく予感。

404401:03/08/01 16:27
>>402
それはスマンかった。
俺は手っ取り早く、手動でテーブル作っちゃってるからSchemaExportなぞ
使ったことも無かった。

今試してみたが、以下の手順で問題無くデータを格納できたぞ(PostgreSQL)。
*.hbm.xml作る
*.java作る
$ java net.sf.hibernate.tool.hbm2ddl.SchemaExport classes/*.hbm.xml
$ java net.2ch.Test

以下のようなシンプルなテーブルでもエラー出ちゃう?
ひょっとしてマッピング内容に起因する問題だったりして。
CREATE TABLE Person (
person_id SERIAL PRIMARY KEY,
name TEXT NOT NULL
);
405デフォルトの名無しさん:03/08/01 23:57
DBのカラム名を日本語にしちゃった人は
ここらへんにでてくるMapping-Frameworkは
使えないと思っていいんでしょうか?
middlegenとかも使ってみてくんねーかな。
>405
一個ずつ丁寧にマッピングを書いてやれば使えないこともない。
408山崎 渉:03/08/02 02:03
(^^)
>>405
なぜに日本語のからむ?
410405:03/08/02 13:00
お客様(DBの管理をする人)が
英語だとわかりにくいとおっしゃるので…
まあ二つ返事でOKしてしまった俺も俺だが・・・
普通そういう時はローマ字にするもんだが。
>405
英語のビュー作ってしのいどけ。

しかし、DBの管理人で分かりずらいから日本語にしてって、
すんげー低レベルな連中と仕事してるな。
そんなんで食っていけてうらやますい。
413405:03/08/02 15:07
低レベルの話題ですいません。
DBっていってもアクセスだし…
管理人っていっても本職は事務だし・・・

ACCESSかよ…
MySQLかなんかで作り直してあげた方がいいんじゃないか?
415401:03/08/02 17:40
>>414
MySQLで動いているシステムのデータをAccess(ODBC)経由で
閲覧してる、ってコトじゃないの?
416_:03/08/02 17:41
>>360

もし、見ていたら確認してください

Web+DB PRESS(技術評論社)って言う雑誌のvol.15に
それの原因らしきものが書いてあります
P164参照してください
本屋行けばまだあるかも、もしくは技評のHPから
バックナンバー注文して
>>415
信じられんかもしれんがちょっとしたデータの管理にRDBMS使うと
いきなり高くなって予算取れないからってAccessそのもので管理する
ケースがあるんだよ。

まあ、部署内で閉じてて誰かがファイル開いてたりってのがすぐわかる環境だったら
正しい選択だとは思うんだが。

おい、取引先の担当さんよ!
PostgreSQLはそんなにダメですか?
MySQLはそんなにダメですか?
あんたの推してるOracleってそんなにいいんですか?
あなたの案件見ている限りじゃお金の無駄遣いですよ
そもそも、Oracle使えるんですか?
Oracle言ってみたいだけじゃないですか?
スレ違いだが。Oracle に払う金は安心料だからね。
安い、普通、ちょっと高め、高いの 4 つから選ぶとき、
値段しか判断基準がないとすればちょっと高いを選ぶのが人間心理。
>>420
なるほど。並・上・特上があったら上が一番売れる罠。>うなぎ・すし
422デフォルトの名無しさん:03/08/03 11:01
MySQLも保守契約ってあるだろ?

PostgreSQLもSQAがあるんじゃない?

となると、知ってる名前じゃなきゃだめってことかなぁ?
423 :03/08/03 11:03
>>419 ブランドの力をなめてはいけない。 ブランドはブランドを維持するために
莫大な投資と宣伝してるわけで…。

424デフォルトの名無しさん:03/08/03 11:13
>>422
SQAじゃねえや、SRAのまちがいね。すんません。
425デフォルトの名無しさん:03/08/03 11:13
>>423
やっぱ、あの暴力的なOracleの値段にくらくらきてしまうんですねぇ。
426_:03/08/03 11:17
427デフォルトの名無しさん:03/08/03 22:20
>スレ違いだが。Oracle に払う金は安心料だからね。
金出せば安心なのか?
責任の所在料とかいうが、被害が出たときはOracleが出してくれる(た)のか?
不明な障害の時親身になって解決のサポートをしてくれる(た)のか?
サポート料とかいってパッチ料金だけなのじゃないのか?

まぁ、大体、みんな自分の財布から金がでていかないから
金を使いたがるんだよな。

予算の内、余った額はみんなに還元するプロジェクトでも
Oracle使うか?
まぁ、ここのスレはDBの機能はあまり使わず、
DBはストレージとして、ビジネスロジックは全部
アプリ側に埋め込むという開発が目的だから、
そういう使い方するだけだったらOracleはいらないな。

DBオブジェクトもテーブルと、インデックスぐらい
しか使ってないんだよね。さらに参照整合も使ってなかったり。

とスレのちょっとスレの内容の方向に戻してみる。
429デフォルトの名無しさん:03/08/03 23:05
DBをストレージとしてしか使わないのって間違ってると思うな。
レイヤーの切り分けって重要だし、ストアドでやった方が簡単で速けりゃそっちを使う。
開発者の切り分けもしやすいし、DBでやるべき事をアプリでする必要ないじゃん。
こういう用途のフレームワークってないんだよね。だから自作するしかない。
>>429
ここのスレで、こういう意見を出す人もいるんだ。
オレもそうだよ、同意見だよ(ちょっと皮肉を込めていっただけ。)

DBはデータだけではなく、ビジネスロジックも一元化させ共有化
させる機能をもっている。

だから、トリガー、ビュー、ストアド、チェック制約、参照整合、
ユーザメッセージ(例外)等、DBの持つオブジェクト、機能を駆使して、
まず開発では、ビジネスロジック
 ・これを更新したら、あそこのデータを更新する、
 ・ここは指定値以下の数値しか入らないようにする、
 ・DBエラーもそれに関して全て作り、どのエラーかもメッセージとして(APに)返す
等をDBで定義し、APはできるだけ、
(擬似的にでも)1テーブル(ファイル)のI/Oの感覚で開発ができる作りが美しいと思う。

AP側の開発者も本来の業務(UIや、APレベルでのプログラムの最適化、高速化)
に集中できる。

他のDBMSの移行時に大変だ、という意見が出るが、それは大変でアタリマエ。
オレらはアプリケーションシステムを作っているのではなく
データベースシステムを作っているのだから。
開発されたDBを変えることの意義を分かっていなく、
DBMSの変更を簡単に考えるのはちょっと賛同しかねる。
431デフォルトの名無しさん:03/08/04 00:00
>ストアドでやった方が簡単で速けりゃそっちを使う。
>開発者の切り分けもしやすいし、DBでやるべき事をアプリでする必要ないじゃん。
俺はまさしくその考えなので、業務ロジックは結構ストアド(PL/SQL)で
組んでいる。社内の基幹業務のDB製品を変えるなんてことは想定もしてない
せいもあるけどね。
最近のOO設計を前提、イコールDBはタダの箱、というJava雑誌等の論調には
正直戸惑っているなりよ…
なるほどねー。
ひとつの社内システムや基幹システムに長期間携わるのならそれもありかも。
でも普通にSIやってるといろいろなDBMSを短期間で扱わなきゃならないから
どんなDBでも同じように扱える方法をどうしても選んでしまうのも事実。
そこまでひとつのDBMSの機能を使い切るまでに至っていないのも現状。
433デフォルトの名無しさん:03/08/04 00:11
DBサーバへのアクセスがボトルネックになるようなシステムで、
ビジネスロジックサーバ側でできることはなるべくしておくっ
てのは、アリじゃないのかね。規模が大きいシステム限定の話
ですが。

DBMSの差し替えが絶対に発生しないようなら、全部DB任せは
楽でいいけど。
434デフォルトの名無しさん:03/08/04 00:17
たくさんのクライアント Web鯖等 ビジネスロジック鯖
以下省略        Web鯖等 ビジネスロジック鯖 DB鯖
            Web鯖等 ビジネスロジック鯖
            Web鯖等 ビジネスロジック鯖
            Web鯖等
            Web鯖等
            Web鯖等

こんなシステム、ありがちでしょ?
435433=434=DB素人 JavaPG:03/08/04 00:57
DB鯖で、データの物理的なストレージへのアクセス周辺の機能と、
それ以外の機能を分散配置できるような賢い鯖ってあるのですか?
436デフォルトの名無しさん:03/08/04 02:01
>>435
ビジネスロジックにデータ処理を持ってきたら持ってきたで
ネットワークへの負荷が上がるのが問題になると思うんだけど・・・

あと、DBMSの差し替えを気にしてるようだけど、DBMSの差し替えよりは
Viewやストアドを別PGで使いまわす方が発生頻度が高くない?
そういう事を考えるとDBMSの機能はフルに利用すべきだと思うよ。
※ORMを手軽に利用する気なら、Viewでゴリゴリは必須のような…

そもそも、規模が大きいシステムでDB鯖が貧弱な構成ってあんのかな?
ここ最近だったら、どこの大手もストレージ周りで稼ごうとするでしょ。

まあ、中小規模の開発だと結構ヤバイ構成を見かけるけどね。
437436:03/08/04 02:09
あ、>>430-431で大体書かれてたのね。

いや、もうバリバリDBMSの機能は使いまくるべきだと思うよ。
Torque良く使うけど、更新系をORMに任せて参照系はViewで外部
切り出しのパターンで済ませてる。
それだと、チューニング時にDB管理者へそこら辺のメンテ振れるし・・・

正直結合する条件が一部変わったくらいで、Javaコンパイル→APPサーバー
再起動の流れはやってられん。
438_:03/08/04 02:23
適当に流れ読んだが・・・

結局時代は、元に戻るのか?
>>439
DBのオブジェクト化がさらに進んでいけば、ガラっと変わる可能性は
あるけど今は過渡期だね。
441デフォルトの名無しさん:03/08/04 10:34
ビジネスロジックをすべてDB側の機能で実装
(または、java との明確な切り分けが)できれば良いが、
ロジックがjavaとストアドプロシージャに分散すると、保守が大変。
そのうえトリガなんか絡んでくると、追いきれません。
保守できるドキュメント書いてね〜
テンアートニのセルベッサでは、
ビジネスロジックをPL/SQLで実装していたような・・・
>>439
「まずスキーマ定義ありき」なスタイルが根強くあるせいではないですか

Torqueとかのドキュメント見ると(良いか悪いかは知らんけど)アプローチが逆なようだ

443429:03/08/04 15:23
意外と賛同者多いんでちょとビクーリw

>>432
うちはWebベースな業務系システム作ること多いんだが、
今のところOracle以外は使ったことがない。

オラクルマスターのゴールド以上がそこらじゅうにいるような
会社だから、他のDBで提案する事がありえないのもあるけど。

そうじゃなくても、業務で使う可能性が高いDBって、
Oracle、DB2、MSSQL、Sybaseくらいなもんでしょ?
運用中にDB移行なんて((((;゚Д゚)))ガクガクブルブル

>>441
トリガー仕掛けすぎは追うの大変だね。前に何でもかんでも
DB側でやりすぎて大変な思いしたことあるからよくわかる。

Javaのパッケージを機能単位で切り分けて、そこにリソースとして
ストプロやビューのSQLも突っ込んでる。びみょーにjarのサイズは
デカくなるが、運用する時にすぐ見つかって便利だよ。

若干スレ違いなのでsage。
> そうじゃなくても、業務で使う可能性が高いDBって、
> Oracle、DB2、MSSQL、Sybaseくらいなもんでしょ?
うちはPostgreSQLが多い。
あとはMySQL、Oracle、DB2、MS SQLServerがほぼ同率かな。
Oracleは高いからあまり使わない。
445デフォルトの名無しさん:03/08/04 17:13
で、結局
ビジネスロジックをRDBMSで処理したがるのはオールドタイプ。
なんでもかんでもJavaで処理したがるのはニュータイプ。
ってことでいいか?

http://www.namazu.org/~satoru/misc/ggap.html
446デフォルトの名無しさん:03/08/04 21:27
>>445
なんでもかんでもJavaで処理したがるのは単なる厨房
447デフォルトの名無しさん:03/08/04 21:39
そもそもDBトランザクションはDBに任せればよいのではないかと思うのだが
EJBのセッション/トランザクションをなぜみんなそんなに有難がりますか?
>>447
言いたいことはわかるんだけど
DBのトランザクションはあくまでDBだけであって
EJBのトランザクションはもっと広範囲

それらを切り分けたりするために
「Required」「Supports」等の属性ある

単純に「行って来い」的な処理ではEJBのトランザクションのありがたみはわからないし、
そこまで細かい案件にめぐり合ったこと無いと思う
449デフォルトの名無しさん:03/08/04 22:07
なんだかんだいって、Entitiy Beanが一番楽だと思えるようになってきたよ。
慣れてきたせいかな。
CMRをちゃんとつかいこなして、モデルを構築し、
Session Facadeな設計にしてビジネスロジックを公開するのが、一番スマートだよ。
BLOBを扱いたい場合に、おすすめのマッピングフレームワークはありますか?

BLOBの取得を必要なときまで遅らせることができるとうれしいです。
今、Hibernateを使っているんですが、普通にsession.find()で取得するとBLOBまで
引っ張ってきてしまうため、わざわざカラムを指定しています。
>>450
遅らせるって言うのは
タイミングを指定するってことでイイのかな?

こういう機能欲しいけど無いと思う
JBossとかのEJBコンテナにこういう機能ついてるけど・・・
452デフォルトの名無しさん:03/08/05 00:05
>>450
適当に自作ジョブキューに突っ込んどいて、必要になったら一斉実行とか、
一般的な遅延評価ロジックとか、そんなのを作るのは簡単だと思うんだけど。
そういう話じゃなくて?
PL/SQLじゃなくて、Javaでストアドがかければなあ・・・

時と場合によって好きな場所に配置できるって、よくない?
Oracle 8iあたりから、Javaでストアド書けたはずだけど?
455デフォルトの名無しさん:03/08/05 01:39
Torque ってどうよ?
トルクは糞
>>456ワラタ
>>454
やっぱりOracleだけなのね…
459デフォルトの名無しさん:03/08/05 02:08
結局、Torque を使う場合には、複雑なSQL書くには無理があるから、
VIEW なんかを使ってDB側も歩み寄れということでよろしいか?
>>459
よろしい。

まあ、マスタメンテみたいな簡単な操作なら、Torque はお手軽だ。
461デフォルトの名無しさん:03/08/05 10:58
>459、460 利点が分からん。
java でSQLを生成するよりも、
Torqueを覚えて、設定して、view 作って、コーディングして、
のほうが効率がいいと言うの?
Torque からのDBアクセスのオーバーヘッドを無視できるぐらい、
コーディングが簡単なの?コードのメンテナンス性が向上するの?
アプリケーションを変えずに、RDBMS の製品の変更や、
OODB に変更する事ってほんとにあるの?Torque だと可能なの?
Torqueに限らず、ORマッピングの利点がぜんぜん解りません。
それは、俺がコボラーだからか?
>>461
実行効率をよくするためのものじゃない
DBをいかにオブジェクト的に扱うか
>>462
コボラなりに解ってるつもり。
実行効率はむしろ悪くなるでしょ
で、オブジェクト的に扱った先には何があるの?
SQLのチューニングは不要なの?コーディングは楽なの?
メンテナンスは?テーブルの変更は?
ってことを聞きたかった。
それよりも、SQLとビジネスロジックを切り分ける設計をしたほうが
シンプルで良いのではないか?
>>463

>SQLのチューニングは不要なの?コーディングは楽なの?
>メンテナンスは?
マッピングフレームワーク使ったときに
SQLのチューニングは出来ない
DB固有の操作はあまり得意ではない
コーディングに関してだが、これはDBマッピングというよりも
いわゆるフレームワーク全体に言えることだが
ある決まった枠の中で作業するというのは人によって窮屈でもあり
勉強しないといけないことも、多い
ただ、それは最初だけだということ。
逆に、保守の面ではフレームワークが有利だよ

>テーブルの変更は?

これは、はっきり言ってどちらの方法でも
修正個所はある。


>それよりも、SQLとビジネスロジックを切り分ける設計をしたほうが
>シンプルで良いのではないか?

そんな設計的なこと、Java開発者なら誰でも考えているし、
Torque以前からアプローチは変わっていない
じゃあなぜ今Torqueや他のそういうマッピングツール使うのか・・・
アプリケーションの設計に時間かけて、あれこれテストなどやってるぐらいなら、
あらかじめ存在するフレームワーク使った方がイイに決まってるから
ただそれだけだよ。


>>463
>>464に補足するのであれば、開発人数が増えていった時に、プレゼンテーション層、
Web層、EJB層、EIS層での開発分離に役立つよ。

あと、少なくとも保守とコーディングは楽になる。
フレームワークを利用してるから開発者が変わっても対応してもらいやすいし。
SQLのメンテナンスなんて、基本的にViewの中身を差し替えればOKじゃない?

>SQLとビジネスロジックを切り分ける設計

TorqueでViewを使えばそうなるんでないかい。

そもそも設計に疑問があるなら、J2EEのデザインパターンに目を通してみればどうかな。
DAO系のパターンは、有名なフレームワークだったらほとんど利用されてると思うよ。
まあ、あれだ。
なんでもありよりも、縛りがあるほうが保守はラクになる。

設計書書くにしても処理を逐次記述していた部分が、
フレームワークの仕様書参照で済んだりする。
ドキュメントが減れば、そのぶんその後が引継ぎやすくなる。
467デフォルトの名無しさん:03/08/05 22:48
DB厨の人は文句言うくらいなら、別に無理して使わなきゃいいんじゃないの。
別に使わなくてもできるし。

まあ、自分は毎回同じようなDAO書くのが嫌なんでTorque使うけど。
468デフォルトの名無しさん:03/08/05 23:10
横からスマソ。
>>464
>保守の面ではフレームワークが有利だよ
しかし、今のフレームワークはどれも寿命が短すぎるよ
時代が下って、引き継げる開発者が果たしているかどうか。
>>467
つーことは、
フレームワークを使用するなら、
フレームワークはどんなDBMSにも対応できる
=DBをストレージとして使用する
のがほとんどだから
特にわざわざ高い金出してOracleでなくても
いい、ということでいいかな?

管理面(バックアップ、リカバリ、物理ファイルの増減etc...)
においても、有名どころの他のDBMSも同じようにできるしね。
470デフォルトの名無しさん:03/08/05 23:16
Oracle が必要なのって結局は安心代でしょ。
Servletとしての基本機能は同じなのに tomcat じゃなくて、weblogic を使うのと同じで。
正直、Torqueだけはやめとけって
なんで日本でこんなに流行っているのかがわからん
>>470
>>427の意見はどう?
既に Oracle の技術者をたくさん抱えてしまっている企業の経営者は、
その教育コストを回収しようという発想になって、
Oracle 以外はダメよっていうだろうな。
>>471

> 正直、Torqueだけはやめとけって
その理由は?
475デフォルトの名無しさん:03/08/05 23:25
>>472
まあ、しょうがないんじゃないんですか。
なんだかんだいって、実績 >>>>>>> 性能、価格 だし。
まあ、 Oracle は性能はいいんだけど、なにせ価格が・・・。
>>474
透過的でないから。
477デフォルトの名無しさん:03/08/06 00:02
>>471
じゃ他に何にするの?

HibernateかJDO(CasterJDOとか)絡みかな。

少なくとも日本では認知され初めてるんだから、自分が気に入らない
アーキテクチャーだからって文句付けるのはやめようよ・・・

そういえば、Strutsも最初のうちは叩かれてたね。
478デフォルトの名無しさん:03/08/06 00:03
>>476
ええ・・・そんなレベルの批判?
>>476
何が?
ぜんぜん分かりません。
あなたはすばらしい知見をお持ちなのでしょう?
もっと詳しく教えてください。それがみんなのためです。
480デフォルトの名無しさん:03/08/06 00:18
カンケーないっすけど、おまえら、オッパイ好きですか?

オレ様は、世界中の誰よりもオッパイが大好きだ。Dカップぐらいがいい。
>480
Dカップ好きは だいぶお利口
Fカップ好きより いくらかCOOL!
そこまで現実わかっているなら
もうひと頑張りでーす
・今現在、そこにあるプロジェクトを完成させるための手段。
 勝つためなら手段は選ぶな。
・将来DBのチューニングなど、アセンブラでロジックをチューンするような
 無意味なものになっていくことを見越しての、先物買い。EJB鯖が自動最
 適化してくれる…日がくるのかねえ?

後者と前者の主張が混乱してるのかもな。
483デフォルトの名無しさん:03/08/06 03:11
471ではないが...

>>477
Torqueはアーキテクチャーが気に入らないって言うよりも出来が悪い。それだけ。
あと最近はそうでもないみたいだけど、ドキュメントも不親切じゃない?
フレームワーク云々、再利用云々、技術者の引き継ぎ云々議論するのもいいけど
ドキュメントや資料が貧弱じゃフレームワークとしては致命的のような気が。

それから、Sun JDOとCastorJDOはまったくの別物なのでヨロシク


>>483
>Torqueはアーキテクチャーが気に入らないって言うよりも出来が悪い。それだけ。
おいこら、なんで出来が悪いのか聞いてんだろ?
おまえ、小出しにしておちょくってんのかコラ?
485デフォルトの名無しさん:03/08/06 09:28
え?トルクなんていまさら使ってるの?(ぷ
>>481
ちょっとなつかしいな。
>>463
考え方が逆だと思うのだが。
DBありき、SQLありきではない。
488デフォルトの名無しさん:03/08/06 11:22
>>483
>>477なんだけど、JavaWorldで特集が組まれ始めるくらいだから
ドキュメントや資料云々の充実はこれからだと思うよ。
まだ単なる過渡期でしょ。

あと、出来が悪いってのは具体的に何?
今仕事で使ってる限り、それほど問題出てないんだけど。
なんか批判する人の多くが、単に使い方を誤ってる気がする今日この頃…

>それから、Sun JDOとCastorJDOはまったくの別物なのでヨロシク

なんでSunJDOが出てくるのかわからん、JDOの話はしてないべ。
HibernateとCasterJDOを例に出したのは俺が単に使ったことあるから。

489488:03/08/06 11:24
>JDO(CasterJDOとか)

あ、ここで言ってる?もし理解が不足してたんなら謝るよ。
本題はTorqueの話ね。
つかフレームワークつかっててドキュメントに満足したことないんだけど。
あんまり良いものつかってないせいかもしれんが。
491デフォルトの名無しさん:03/08/06 13:27
Hibernateマンセー
Torque使ってるヤシは負け犬かチョソ
>>490

monazilla Part 4
http://pc2.2ch.net/test/read.cgi/tech/1042432238/846

皆考えることは一緒って事でしょうかね。
>>491
両方を使いこなせてないなら、お前も負け犬では?
494483:03/08/06 17:18
>>488
Torqueがまだ過渡期だってのには同意するけど、Hibernateだったら
既に充分すぎるほどのドキュメントが揃ってるわけで。
Torqueは、必要最低限の利用法をカバーしたTutorialと
(シンプルすぎる)User's Guideくらいしかないでしょ?
Undocumentedな部分が多すぎて、挙動を確認するために
逐一ソースを追っていくのがダルいです。
495483:03/08/06 17:30
で、俺がTorqueの出来が悪いと思っているのは以下の点。
ただ、去年検証してダメ出ししたっきりなんで、間違ってる点や
既に解決している部分もあると思う。それらについては指摘しておくれ。

OUTER JOINがサポートされていない。

JTAに対応してないみたい。

オブジェクトを更新した際、明示的にsave()メソッドを呼ぶか
PeerクラスのdoUpdate()メソッドを呼ぶ必要がある。
→透過的じゃないやん

あらかじめ設定したJDBCコネクションしか使わせられない。

自動生成されるクラスが多すぎる。
クラスFooに対して、FooPeer、BaseFoo、BaseFooPeerって…。
クラスを自動生成する都合上、BaseFooが出来るのまではわかるが。

オブジェクトを1つだけ取得したい場合でもBasePeer.doSelect()に
Criteriaを渡して、結果をリストで取得しなければならない。
これじゃダサすぎ。
List result = FooPeer.doSelect(criteria);
Foo foo = (Foo)result.get(0);

(続く)
496483:03/08/06 17:31
(続き)

Eclipse用プラグインが無い。
XDocletがTorqueだけサポートしていない(HibernateとCastorは
サポート済)。いちいちマッピングを手書きするのは面倒です。

足周りのVillageがさっぱりメンテされていない。
なんとなく不安。

プロジェクトに組み込む際に必要な下準備が多すぎる。
Hibernateだったら、データクラス毎に*.hbm.xmlを用意して
hibernate.propertiesをクラスパスに置けばOK。

まあ、上記の3つはどうでもいいような気もするが。
JDOを使ったことのある人に聞きたいんだが、
パフォーマンスはどうよ?

いくら過渡期とはいえ、これからパフォーマンスが大幅に
改善されることはないと思うのだが...
>>497
Jakartaもまだ完璧JDOじゃないし・・・
トライアクティブとか言うやつ試したけど

っていうかパフォーマンスの意味わかんない
>>483
いや、だからTorqueの作りがダサいってのは別に否定してないわけで・・・
そもそも、アナタが文句をつけているのはアーキテクチャーの話じゃないの?

「出来が悪い」って、「バグバグで使えない+最低限必要な機能が存在しない」って
意味かと思ってたよ…
OUTER JOINはそもそもView使っとけば良い話だし、JTAに関しては対応せずとも
通常のConnectionを利用したTransaction管理が行えるから、最低限の機能は満たしてる
んじゃないかな。
他はそれこそTorqueのアーキテクチャーに文句をつけてるだけでしょ。

俺もHibernateは好きなんだけど、ほんとに日本でドキュメント充実してると思ってる?
ためしにgoogle[日本語]でHibernate javaとTorque javaの検索件数を比較してみてごらん。
どっちも少ないけど、Hibernateの使い方なんて特に少ないでしょ。
※俺の現場では英語を読もうとしない技術者の人が多いから、とてもじゃないけど
 Hibernateは導入できん。(TorqueはWeb+DBの記事とWebを見せてやらせてる)
500483:03/08/06 20:47
>>499
例えば、単一のオブジェクトを取得する手段が提供されていないってのは
アーキテクチャレベルの話じゃなくて、作りがダサいってことにならないかな。

それから、俺は日本語のドキュメント云々なんて話はしてないです。
そもそもTorque使おうってのに英語のドキュメント読まないで仕事になる?
だから>>494でも「Hibernateの英語ドキュメント」と「Torqueの英語
ドキュメント」について*のみ*比較してたんだけどなあ。

Torqueマンセーなのは日本の雑誌記事ばっかりで、日本のサイトをぐぐった
限りではTorqueを褒めてるサイトがひとつも見つからないってのが
そのままTorqueの現状を表してるでしょう。
>>500
いや、まあ最初から英語ドキュメントで比較してるのは分かってた
んだけどね…

でも日本での普及って点を考えると日本語ドキュメントで比較するのが
普通でしょ。だから好みがどうあれ日本ではTorqueの方が主流になる
可能性は高いよ。

>そもそもTorque使おうってのに英語のドキュメント読まないで仕事になる?

システムの基本実装する人(アーキテクト)だったら仕事にならない。

でも、個々の限定されたプログラムレベルであれば、Torqueの日本語ドキュメント
程度のものがあれば、十分仕事をすることが可能だと思うよ。

最近の現場は派遣社員の質も含めて相当低くなってるよ。
英語のサイトを見ようともしない人もざらにいる。
だから日本語ドキュメントの充実は技術を導入する上で必須だと思う。
※アナタが少数精鋭の会社にいるんだったらごめんなさいね
 結構俺は短期派遣の若い人と組まされるのが多いので…
502501:03/08/06 21:20
ちょっと話がORMからはずれてきてしまったので自粛します。

>>500さんに誤解の無いように言っておくと、Hibernateは好きです。
ただ現時点で通常のプロジェクトで使わせてもらえるかは別の話って事で・・・
※2,3人の規模だったら是非使ってみたいと思ってます。
Hibernateも全部日本語化してくれないかなあ。
Criteriaとほとんどおなじアーキテクチャのライブラリは2年程前に作ったな。
俺ライブラリだというのもあったが、かなり楽ができる機能だ。

動的に検索条件を構築するならあのくらい簡潔なほうがいいな。
作るのにかかる労力に比べて、「あると便利度」がかなり高い。
505デフォルトの名無しさん:03/08/07 01:00
英語を読もうとしないキャツがオープソなんてやるんじゃねーよ。
506_:03/08/07 01:01
英語読めてHibernateの良さがわかる奴が、日本語の説明文書いてあげればいいのでは?

日本語ドキュメントが無いのを理由に採用を躊躇してしまう事を、怠慢と取るか
不幸と取るかで変わってくるだろうけど、少なくともTorque陣営は、
ドキュメントの日本語化によって、日本での利用者拡大に成功していると思う。

我々は、英語の文章を読むことが仕事じゃないんだし、むしろ、それに時間を
とられて技術的なことをする時間を削らなければならないのは不幸だと思う。
使う人がいちいち翻訳するのが当たり前だから、英語のドキュメントが充実して
いればそれで良しという考え方は違う。
>>505
javaが読めれば問題ない。
で。

うまいことORMでいい感じになったやしはいないわけですか
>>509
VIEW との併用でうまくいくでしょ。
511デフォルトの名無しさん:03/08/07 01:28
複雑な検索条件は、VIEW+単純な検索条件に整理。
→あとはORマッピングツール任せ。どうせどのツールでも大して変わらん。

が一番すっきり?
viewってなんですか?
この言葉のおかげで話の内容が見えないので誰か教えてください
どうもMVCのViewのイメージがこびりついちゃって・・・
DBのViewってどの部分なんですか?
>>512
ぐぐれ!まずはそれからだ。
MVCの View ではない。
514デフォルトの名無しさん:03/08/07 01:38
>>513
いや、MVCのビューにかなり近い存在だと思うが。
RDBにおいて、Mが実テーブル、Vがビューでしょ。Cはなんだろ?DMLのSQLかな。

GUIでしかMVCといわないと思ってる人は屁タレケテーイですよ。
>>514
それは観測者が異なるという意味で、違うでしょ?
>>512 はアプリケーション側からの視点で言ってるんだから。
文脈を無視して、屁タレケテーイというのはどうかと。

RDBMSを観測対象の中心にすえれば君の言ってることは正しいと思うよ。
>>512 へは、モデル側から見れば、DBも永続化できるVIEWといえるとか
言っちゃうと混同してしまうかな?

まあ、あれだ。何事も多様性があるってことだ。
516514:03/08/07 01:55
正直、スマンカッタ。
>>516
いや、いいんだ。

それよりも、>>512 が VIEW も知らんのに仕事になるのかと問いたい。
業務系ではないのかな?
>>512
ViewはViewだ。もっとわかりやすくいうなら外部スキーマだ。わかったか。
>>514
ぜんぜん違う。知ったかスンナ。氏ね。
520デフォルトの名無しさん:03/08/07 07:07
英語で仕様書も読まないようなキャツはプログラムなんてすんじゃねーよ。
何がJavaさえ読めればいいだよ。
521デフォルトの名無しさん:03/08/07 07:14
522デフォルトの名無しさん:03/08/07 07:39
>>520
そうなんだけど、英語読まない奴そこら中にいるよね。
俺の隣の席のやつとかw
523512:03/08/07 10:43
いや〜あぶねぇあぶねぇ
おまいらが、あまりにも叩くもんだから
「なによViewって!」
と手元にあるポストグレスキューエルの
本かなんか見ながらView探してたよ
おいおい、かなり重要な機能ではないか
524483:03/08/07 11:38
>>501
了解です。
俺も、雑誌記事の影響でTorqueが「機能的」にもベストだと
思わされている人たちに「HibernateやCastorもあるよ」と言いたかった
だけなんで、これにて終了ということで。
>>499

>JTAに関しては対応せずとも通常のConnectionを利用したTransaction管理が
>行えるから、最低限の機能は満たしてるんじゃないかな。

ほんと最低限だな。J2EEの中心部分使えないのダサすぎw
今更接続プーリングなし、自前トランザクション管理ですか?

EntityBeanが腐ってるから使いたいフレームワークなのに、
SessionBeanの最大の利点を使えないなんてな。

こんな使い方してWebLogicなんか使ってるプロジェクト
いっぱいあるんだろなぁ( ´ー`)フゥー...
>>525
は?JTAに関してはSessionBean内でTorqueを使えばいいだけじゃん。

接続プーリングはTorque単体でもサポートしてるし、知ってる?
そして何故WebLogicが突然出てくるのかわからん。

( ´ー`)フゥー...イタスギ
ところで Apache OJB(http://db.apache.org/ojb/)ってのは?
これも JDO API をサポートしているようですが。

JDO がよさげで、その実装例のひとつである hibernate がよさそうってのもわかりました。
Apache OJB も JDO の実装例のひとつだと思いますが、こいつはいかがでしょう?
>>527
hibernateはjdo実装じゃないですよ。
Jakarta OJBもjdoってことだとまだまだらすぃ
だから、現時点ではトライアクティブJDOぐらいだな
>>528
いまいち私がよく理解していないのですが、JDO っていうのは規格(仕組み? 枠組み?ここらへんはアバウトですが)
の名前ではないのですか?

たとえばServlet というのは規格の名前であり、その実装例として Tomcat や WebLogic、Resin がある
と思っています。

JDOも規格の名前で、その実装例としてCasterJDO、Hibernate、OJB があると思っていたのですが...
あ、でも http://db.apache.org/ojb/ をよくみたら、

・A JDO compliant API
・full JDO implementation is scheduled for OJB 2.0.

ということで、JDOのフル実装はOJB 2.0 から、とありますね。
だから

> akarta OJBもjdoってことだとまだまだらすぃ

なのか。
>>530
規格というより仕様の気がする。

あと、HibernateはJDOとは別物じゃない?
532デフォルトの名無しさん:03/08/07 21:20
ちょっと怪しいリスト。

Torque => Criteria
CastorJDO => OQL(ODMG 3.0のサブセット)
Hibernate => 独自SQL、Criteria
Apache OJB => Criteria、QOL(ODMG 3.0)、Sun JDO 1.0(不完全)
KodoJDOなど => Sun JDO

ついでに、Apache OJBは下の方でTorqueを使ってたような気がします。
533529:03/08/07 21:26
>>531
> 規格というより仕様
あ、そういうこともできますね。というかそういう表現のほうが正しいかも。
Servlet API をみると、ほとんどが java の Interface ですが、
各ベンダはこの Interface をimplements すれば、Interface で宣言されている仕様を実装していることが
保証されているので、仕様にのっとっている、ということもできるでしょう(あくまでもコンパイルレベルですが)。

オブジェクト指向の、正しい「機能と実装」の考え方だな。

JDBC もそうですが、OracleのJDBCドライバのように、サポートに問い合わせてみると「その機能は未実装です」
とか返事が返ってくるのはむかつく。

ちなみに Sun JDO って http://java.sun.com/products/jdo/ のことだよね?
こいつの実装例として、>>532 の Kodo JDO っていうことなのかな?

Hibernate はこれからみてみます。

あと >>530 も私です。
534デフォルトの名無しさん:03/08/07 21:26
>>530
JDOってのはSunの仕様の名称であると同時に、オブジェクトとデータベースの
マッピング手法の代名詞的な扱いもされているので、仕様であるJDOを指す時は
Sun JDOとかSun's JDOみたいな表記をすることが多いです。

特にCastorJDOなんかは、CastorXMLという兄弟がいるので便宜上JDOを
付けて呼ぶことが多いです。

こう書くとわかりやすいか?
JDOは「RDBMS」
Sun JDOは「SQL92」
CastorJDOは「RDBMSっぽいけど仕様は別なもの」
商用のJDOエンジンは「SQL92フルサポートなRDBMS」
>>534
ぜんぜん
536529:03/08/07 21:36
>>534
うーん、なんとなくわかってきたような... どうもありがとう。
ちなみに Servlet(の仕様)というと、Sun の Servlet という使用があるわけだが
(Servlet サポートという場合、Servlet API を実装していなければならないですよね?)、

JDO の仕様は Sun の JDO 以外にもあるの?

べつに、細かい話なんてどうでもいい
はっきりいって話題が違う
>>1 >>5 >>10
539デフォルトの名無しさん:03/08/08 01:34
HibernateをWebアプリで使ってるんですが、いちいち
HibernateのSessionを開いて、閉じて、例外処理を行うあたり、
JDBCをコーディングしているのとそんなに変わらないような
気がします。

この点についてはどう思いますか? Hibernateのサイトでは
フィルターを使って開け閉めを行えばいいみたいなことが
書いてありますが、あまりスマートじゃないような。
TorqueはSQL作ってくれたり、HTMLのDBドキュメントを生成してくれるから
Javaに限定されず、それなりに需要はあると思うんだけど…

Javaでの実装時はHibernateの方がシンプルで良さそうだね。
544デフォルトの名無しさん:03/08/10 14:51
外部ソース(DBとかファイル)の扱いを、抽象度の高いクラスで
ラップすればいいだけでは?
それだと、Torqueだろうが、Hibernateだろうが、JDBCゴリゴリだろうが、
CSVファイルだろうが、カンケーない。
むしろ、設定ファイルの管理やOuterJoinできませんなんて馬鹿な制限がない分、
JDBCゴリゴリをラップしたほうがシンプル。
ま、俺様フレームワークになることは、確実だと思うが。
545(゜Jし゜):03/08/10 19:50
Javaじゃなくて.NetFrameWorkですが、
ADO.Netではこの辺はどんな感じなのでしょうか?

DataSetを持ってきてCommandBuilderにSQL自動生成させて、
ってのは標準でORマッピングっぽいことが出来るような
気がするんですが
>>545
その場合プログラマはDataSetという非ドメインオブジェクトを意識することになるので、
ORマッピングとは言わないと思われ。
java.sql.Statement#executeQuery()の戻り値が、HashMapを持ったArrayListになって、
データの更新をラップするメソッドが提供されるようなものかな。
(API的には間違っているけど、概念的にはあってると思う。)
>>544
OuterJoinをSQLでやらずにViewでヤットケというのが、今の潮流のようですが…
>>547
そんなばかな。
今のO/Rマッピングのフレームワークがいけてないだけ。
549デフォルトの名無しさん:03/08/13 11:31
JDO開発者&ベンダーコミュニティJDOCentralにSunが参加。
http://biz.yahoo.com/prnews/030812/latu050a_1.html
550山崎 渉:03/08/15 15:34
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
一応、コレの%HOME%\demo.batは正常に動くのでデータベース設定等は正しいみたいです
552デフォルトの名無しさん:03/08/17 18:04
>>551
マジで!?
ああ、setupコマンド打てばいいのか・・・
軽く保守
555デフォルトの名無しさん:03/09/01 13:44
age
556デフォルトの名無しさん:03/09/10 15:19
Hosh
重く保守
ネタ無いねー
559デフォルトの名無しさん:03/09/18 22:21
>559
これって喜んでいいの?
悲しんだらいいの?
JBossは使ってなくて、Hibernateは使ってるんだけど。
561デフォルトの名無しさん:03/09/18 23:46
ここまでの俺流あらすじ(Javaの知識は基本以外はないので客観的に見れてるはず)

各フレームワーク

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

設計とか

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

総評

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

個人的な意見

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

保守age
>>561
HibernateはJDOの実装ではないと思うのだが

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


564デフォルトの名無しさん:03/09/25 22:24
いまさらなんですが>>405の理由を教えてください
565デフォルトの名無しさん:03/09/26 01:35
WebObjectsのEOFさわらないで、O-Rマッピングを語るとは笑止千万。

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

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

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

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

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

けど、それがwhere句の記述順序で決まるようなアホなDBMSは
いまどき存在しないだろう。
sequencial scan で選択条件が複数ある場合にちょっと効くかな?
という程度じゃないか?
「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などのフレームワークを使用した設計のパターンでしょうか?

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

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

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

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

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

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

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

どうもありがとう。
>>591
Oracleはそうなわけだが。。
>>595
んなアホな。PostgreSQLだってもっとマシなプランナ持ってるよ。

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

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

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

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

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

柔軟性という意味では、アプリケーションレベルではDBMS毎のアダプタ実装を
プラグインできるのだが、本来はもう少し細かくテーブル単位でカスタマイズ
したいところだ。Oracleのシークエンスにのみ、個々のテーブル単位での
カスタマイズに対応しているようなんだけれども。
>>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)
);
で、これを管理するためのクラスもある。

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

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

postgresql.jar とか MySQL 用って、みんな type4 だよね?
これらふたつや DB2 用のドライバに、type2 ってあるのですか?
>>612
DB2にはあるぞ。

↓ちょっと古いけど・・・
www-6.ibm.com/jp/software/data/developer/library/techdoc/javappli.html
つーか、このスレで間違っているのでは?
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コしかない。

とりあえずご参考までに。
>>615
これ新しいの?
この前たまたま見かけて、オレもサンプル読んだ程度だけど、
ちょっと変わってて面白いと思った。
>>616
変わっているというか、誰でもやってることをCommonsプロジェクトが
やってくれた、という感じ。
いつも、みんなやっているよね。
毎回毎回作っているよね。
それなら、ライブラリ化しよう!
いつでもどこでもみんな同じモノを使えるよ!
ってとこかな。
WEB+DBに載ってたseasarってあp鯖の
SqletってORマッピングが結構気に入った.
SQL書くのが気にならないなら便利かも,
619615:03/11/26 23:09
>>616
> これ新しいの?
たまたま jakarta のサイトを見ていたら、1.0 release と出ていたから、新しいものなのかと思った。
えらそうなことを 615 で書きましたが、今回はじめて知りました。
beta のころからずっと知られていたものなのだったらすみません。
ちなみに 11/10 付けのリリースだそうです。
620615:03/11/26 23:11
さらに間違ってしまいました。
誤:11/10
正:11/11
621デフォルトの名無しさん:03/12/05 16:55
Torqueでcount(*)ってどうやってとったらいいの?
全件ならリストサイズなんだけど、GROUP BYかけてグループごとの件数を知りたい場合の話ね。
やっぱりループでぐるぐるカウントするしかないの?
622デフォルトの名無しさん:03/12/06 00:46
spring frameworkの話題はもうないの?
621>>
criteria.addSelectColumn( "count(*)" );
Record result = (Record) HogehogePeer.doSelectVillageRecords(criteria).get(0);
int count = result.getValue(1).asInt();
おお!
Village使うのか。このあたりよく知らなかったよ。
ありがとう。
いい人だ>>623
625デフォルトの名無しさん:03/12/12 11:13
Hibernate 2.1 が出たよ
>>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も書けるようになったみたいね
Hibernateで「表」っていう漢字で終了する文字列がDB追加できないんですが・・・
『表』問題なんて、プログラマーなら誰でも知ってるだろ…
Hibernateは関係ないぞ。
>>628
\が入ることしかしらん。
なんでHibernateが関係ないとなるのか、わからん。
>>629
関係ないの表現のとり方を間違っている。
628のいいたい関係ないは、固有の問題じゃないということ。
Hibernate使ってても使って無くても、そういう文字は
エスケープするよねということですよ。はい。
>>631
ようするに、Hibernateは自動で対処してくれないということだな
627です。
無知でした・・・
どうもありがとう。
>>632
開発チームにそういう要望を誰もコミットしてないからだろ。
頼まれてもいない全言語ですべての文字が文字化けしないか誰が試すんだよ。
>>634
普通に\入れたときはどうなるの?
>>635
当たり前だけど普通にJavaで\使ったときと同じ。
>>636
普通にJavaで\使ったときとは?
文脈からいえば
 PreparedStatement#setString
のとき?
"\"hoge\""

"価格は\\4,000"

みたいな感じだろ。
それじゃ"表示"が文字化けすることにはつながらんね。
>>639

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

どこに”表示”に関しての話が出ておる?
>>640

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



……だめぽ

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

Tierraって使ったことある人いない?
今仕様策定中のシステムで、TorqueかHibernateかその他のR-Oマッパーか
はてはJDBC+DbUtilsでゴリゴリか悩んでる中。DbUtilsでいい気がしてきた。
日本語の方が負の遺産だわな。
文字コードなんて複数あるんだし。
654デフォルトの名無しさん:04/01/29 14:29
今イジってるPHP+MySQLのシステム、
1つのカラムに、PHPのオブジェクトをシリアライズしたやつが入ってるYO!
氏ね
>>652
そだね。
DbUtils程度で押さえておくのも一つの手かもね。
UTF-8がOSでもDBでもの文字コードの標準になればなんとかなるだろ。
>>656
Oracle使ってると、それでも問題は出る。
なにがへぼいって、varchar2をバイト数で指定するところ。
UTF-8だったら1文字当たり3バイトで計算とかだし。
ありえなくなーい?
>>657
だから、標準になったらだろ?
659デフォルトの名無しさん:04/02/04 00:04
2chでマッピングツール作るってのはどうですか?
>>659
つくれるやつは、いろいろいるだろうが、
画期的な発想が思い付けないよね。
結局あれと同じジャンみたいな。

も前はどんなのが欲しいんだ。
661659:04/02/04 11:28
>>660
例えばSQLを外部で管理( XML(SAP),DB等 )っていう方法
外部ファイルにオリジナルのSQL,INPUTパラメータ等を書く。
次にデータ設定用のクラスを作る。(String, int, Dateなどの動的配列(MAPとか) )

使用方法
1・外部データ作成時のSQL固有のキーを使用してオリジナルSQLを取得
2.INPUTパラメータがあればsetParam( ... ) で設定
3.SQLを完成させ、DBクラスに渡す。
4.DBクラスがDBのメタデータを元にデータ設定用のクラスの
  適切な型にデータを設定
5.データ設定用クラスから列名で値を取得する。

肝はメタデータを使うってとこですね。
かなり思い付きです。
つっこみお願いします(w
>>661
複雑なSELECTの扱いや、
VIEWやSTOREDなどと、どう切り分けるかが鍵ではないでしょうか?
その辺りはどう考えています?
システムごとのマッピング程度なら、自分で書いてもそれほどじゃないんだよね。
如何に汎用にするかが問題になるわけで。
664659:04/02/04 17:48
>>662
複雑なSQLとは具体的にどのようなものでしょうか?
VIEWはまだ考えていません(w
CASE WITHとか、FROM句にサブクエリ入れて条件絞ったりとか、
UNIONで完全外部結合やったりとか、OracleでSELECT 〜 START WITHやったりとか?
666659:04/02/05 00:53
>>665
それは大丈夫。
Statement$executeQuery後のResultSetを元に最終的に取得する列名などが分かるので。
あとHashtableを継承したクラスでgetメソッドをラップすれば使用する側でキャストする必要がなくなります。
(getString,getIntとか)
ストアドも同じ感じでいけそうです。
なんとなく汎用にすればするほどラップする意味なくなるくらい
外部ファイルに書く必要がでてきちゃって何したかったのかわからなくなる罠
そもそもそれって汎用マッピングツールを作るのは無理じゃないかと思うから、
そこらへんあきらめて、代わりにただのSQL文を簡単に使える仕組みを提供するとか、、?
>>661
それって、Sqletとあまりかわらないような。
http://homepage3.nifty.com/seasar/nazuna-sqlet.html
JavaBeansやMapへのマッピングまでやってくれるけど。
SQLの規格に従わない馬鹿をこらしめてやりたい。
諸悪の根源はベンダそのもの。準拠しないC++コンパイラが
ろくでなし扱いされるのとは大違いだな。まったく。
671659:04/02/05 11:40
>>669
既にそんなものが(w
…でこういうのって需要ないのでしょうか?
Sqletを使われた人います?
>>670
スレ違い気味だが、激同。
ベンダー拡張使うなとは言わんが、互換性は持たせとけよと思う。
でも、DB屋さんってそういうとこ全然無頓着なんだよね。
以前仕事した人と話したとき、「なんで?DB違うんだから、当たり前じゃん」ってな反応だった。
そいつらが変わらん限り、ベンダは囲い込みが出来るわけだし、状況も変わらんなと思った。
>>666
それはResultSet->Objectの話でしょ?
それ自体が問題になることはあまりないように思う。

そうではなくて、クエリの自動生成をどのように行うか
ということ>662は言いたかったのではないのかな?

実際そこがキモになると思うんだけど...

674659:04/02/05 17:41
>>673
まさにSqletのように外部ファイルに書くって方法です。
使う側では検索条件があればINPUTを設定するだけ。
でgetString("列名"),getDate("列名")てな感じで呼ぶ。
XMLじゃなくてプロパティファイルにするなら
master.sql_1=select * from hoge where id ={0}
みたいにできるかなと。

…こういうのは使えないですか?(w
675673:04/02/05 18:27
>>674
人によっては使うんでないかと思うよ。たぶん。
誰もが1度は考える方法だと思うし。

個人的に欲しいものは、
1.クエリがDBセーフで記述できる。
2.クエリを記述せずに、ある程度複雑なクエリを発行できる。
かな。

ちなみにTorqueは使いづらいと思っているけどね。
マップすると表形式でぐるぐる回して表示したい時に、逆に面倒なんだよね。
マップしないと、それ以外のすべてが面倒。
677659:04/02/06 01:48
>>675
> 1.クエリがDBセーフで記述できる。
これはTorqueがやってますね。(未実装が多いけどw)
個人的にはSQLは自分で書きたいほうなので今のまま作ってみます。
あとTorqueみたいにたくさんのクラスを自動生成ってのは嫌ですね…。

>>676
MAPを継承したクラスを使えばいろいろできそうですが…。
出来る出来ないじゃなく、RSより面倒か面倒でないかの話だろ?
>>675
個人的にはある程度複雑なクエリを書く必要が出てくるんなら
素直にSQL書いたほうが早いと思うんだよね。

少なくともSQLは良く出来た言語だし、RDBのデータをOOAして
作ってきた側からから扱おうと思っても見過ごせないくらいの
ギャップが表面化するだけじゃないかと。
Commons DbUtilsってSqletと似たようなもん?
>>680
プログラマにSQLは書いてもらうけど、
底辺のJDBC APIはフレームワークが処理するという
意味では同じだね。

SOA(SQL Oriented Approach)
つーか、SQLが統一されれば問題ないんだろ?
Oracle8が無くなるまでの辛抱だ。
オブジェクト→いきなりただのテキスト→SQL→RDB→実行してみないと
結果わからん→JavaのデバグかSQLのデバグかわからん→1にもどる

コンマやスペースの所為で実行時エラーになるのは正直ウザい。
エラーになりゃまだいいけど、一生エラーにならんかもしれん。
でも、現状のO-Rマッパは、マッピングの設定がもっとウザい。

ってことで、俺はDbUtils。カユいところに手が届いてて良い感じ。
684デフォルトの名無しさん:04/02/11 17:23
DbUtils 簡単そうで激しく気に入った。SQL 読み込みローダも付いてんだね。
ところで DB から Bean を作成する簡単ツールとか付いてこないんすかね?
俺もDbUtilsがいいと思う。
SQL書かないとね。
686684:04/02/12 00:01
>>685
禿げ同。 やっぱりほとんど制約なしでそのまま SQL で書けるのは良い。

>>684 読み込みローダ
。。。今見たら俺、馬鹿っぽさ爆発じゃないか。
>684
>DB から Bean を作成する簡単ツール

禿げしく欲しいが、多種多様のDBに対応させるために膨大なツールになって、
(DBのマイナーバージョンまで対応せんと、型のマッピング変わってたりするし)
「あんまつかえねえなぁ〜」とかなりそう。結局、ExcelマクロとかPerlスクリプトとかで
ゴリゴリ作ってるほうが案外幸せなのかも。ある意味マッピングフレームワーク。
688683 & 687:04/02/12 01:55
あ、いや、Torqueとか市販のO-Rマッパーの存在を否定してるわけじゃないのよ。
いろいろ試してみて、現状ではそう判断した。設定が簡単で軽いフレームワークが
あれば、今にでも飛びつきたいところなんだが。
DBUtils + (Generics + 可変長引数) = (゚д゚)ウマー
うちの開発部ではExcelのマクロ使って仕様書から生成してら。
>689
仕事で使えるのはいつになるのやら。
8月アップの案件でDbUtilsは採用決定。1.5はどうかなぁ…。
DbUtilsは普通に採用するが、1.5はなー
特別な事情がなければ今年中は無いんじゃないかなー そうでもない?
新しい仕様はみな微妙なものばかりだし、
すぐ使いたがるやつvs覚える気無いやつで内戦が起こりかねないし
コーディングルールだって直さないといけないからな・・・
間違ってたらごめんだが1.5ってまだreleaseしてないでしょ?
そんなもの仕事で使うの?
それはさすがにうちの会社ではありえん。
普通に考えたら新しい(beta含む)技術なんかリスクありありで
仕事で使わんな。でも新しい技術使いまくってアピールに
成功してる会社はあるな。ごく少数だけど。そっちのほうが
面白そうだ。
確かに面白そうではあるがリスクを誰が負うかが問題だな。
会社の方針としてあるのであれば使えるんだがね。
>>696
そのリスクを評価するのがエンジニアの仕事でしょうが
>>697 が責任を負います。
>>697
評価してるうちに正式版が出るわな
自分で一から書いたってリスクはあるんだから、
あり物使っても一緒だと思うよ。
金あるなら、MSとかOracleとかに囲われて
楽々やるのもいいかも知れないけど。
>>699
J2SE1.5 をいつもで評価する気?
えらくのんびりしたプロジェクトだな。
他人のリスクを自分で負うのと
自分のリスクを自分で負うのは
違う

たとえ他人のもののほうが自分のものより品質が良くても
あり物レベルのものが予算内で作れるなら、
自分で創って自分で責任負えばいいじゃん。
それが出来ないから、人を削って製品を買うか、
不具合覚悟であり物検証して使うかしてるんだって。
704692:04/02/15 23:58
あぁ、すまん。1.5どうすっぺの言い出しっぺです。試作版が8月アップで、
正式版が来年春予定なのよ。んなもんで、DbUtils+1.5の組み合わせも一考の余地ありかと。
一考したけど、やっぱBeanListHandlerでゴリゴリやります。
DbUtil+DBCPってDbUtil継承して書き換えないと使えないですか?
DbUtilもデータソース使ってるみたいで…。
連携がちょっと厄介かも(w
>>705
おまえの頭を最初に書き換える必要があります。
継承して何を書き換えるつもりなんだ?
707デフォルトの名無しさん:04/02/18 00:25
Torqueで、

select distinct HOGE from HAGE;

はどう書くんでしょう?

criteria.setDistinct();

のあるなし以前に、

Criteria criteria = new Criteria();
criteria.addSelectColumn(HagePeer.HOGE);
HagePeer.doSelect(criteria);

が、

com.workingdogs.village.DataSetException: Only 1 columns exist!

で落ちてしまい、困っています。
>>707
SQLと同等なことをするのに四苦八苦するような
フレームワークで時間をつぶすのはもったいないよ。
709707:04/02/18 13:12
Criteria criteria = new Criteria();
criteria.addSelectColumn(HagePeer.HOGE);
Criteria criteria = new Criteria();
List list = BasePeer.doSelect(crit);
for (Iterator it = list.iterator(); it.hasNext(); ) {
Record rec = (Record)it.next();
System.out.println(rec.getValue(1).asString() );
}

でうまくいきました。
こういう問題があるから速攻止めたんだよな>トルク
そーいやカウントの仕方がいまだわからないやw
JULP
ttp://julp.sourceforge.net/index.html
こんなんどう?

あと、
ttp://homepage2.nifty.com/igat/igapyon/diary/2004/ig040121.html
いが○ょんもなんかやってる。
>>711
> いが○ょんもなんかやってる

仕様案見たけど、これって車輪の再発明じゃないの?
そこのレスにあるけど、同じようなもの作ってる人いるし。

DbUtilsは低機能でORマッパーとは言わないかも
しれないけどシンプルで他と違って光ってるな。
漏れも同じ車輪しか作れないけど、誰かドカンと衝撃があるものを
世に出してください。
特別なマップ記述なしに、SQL発行してBeanのListで返ってくるというDbUtilsは、
JDBCと平のSQLを使ったJava<->RDB間車輪として完成したと言っても過言ではないと思う。
SQLになった時点でJavaと接点が切れるという問題はあるにせよ、相当使い易いもの。

後は、手を動かしてフレームワーク作るより、頭動かして発明するしかねえなぁ。
714デフォルトの名無しさん:04/02/21 17:43
最終的には、Cayenne + Tapestryで決まりだと個人的に思う今日この頃。
715デフォルトの名無しさん:04/02/21 19:42
マッピングツールで、Rogue Wave の SourcePro DB ライクなものってありますか?
>>714
Cayenne って他と比べてズバ抜けてるの?
それとも単に今までのORマッパの良いとこどり?
cayenneって、たしかXMLとかでスキーマをこさえてやらんでも
勝手にスキーマ構造を抜いてきてくれるんじゃなかったっけか。
WebObjectsのEnterpriseObjectFrameworkみたいな感じ?
torqueでもRDBからSchema抜き出す機能なかったっけ?
Torqueは、XML書かないとならないのでは?その必要も無し?
1テーブルあたり4クラスもできあがるのは、ちょっといただけないのだが。
Javaじゃないけど、金曜日のYukonセミナーで、
.NET版O-Rマッパーフレームワークみたいのを提供すると言っておった。
やっぱりデータ中心アプリだとO-Rマッパーが必要になってくるよね。
ということかな。
Hibernateは楽だぞ
Hibernateの楽なところって、具体的にどのへん?
スキーマのリバースとかできるの?
Middlegen で主要なORマッパーのスキーマのリバースは
出来るんじゃないの? ところで Middlegen で DbUtils 用の
Bean 作ったりはでけへんのかな?
>>719
torqueだがbuild-torque.xmlにjdbcターゲットがある。
これ使えば既存のDBからschema.xmlを生成してくれる。
>> 722
HibernateはMiddlegen + Middlegen-Hibernate(Hivernateのサイトから)で
スキーマのリバースが可能。
>>722
Eclipseプラグインのjfacedbc使ってもいけそうですね。
727デフォルトの名無しさん:04/02/23 22:00
>723
Middlegenの素のままでは融通が利かないかもだけれども、
仕組みは結構単純なんで、自分プラグイン+Velocityで
結構なところまでいけるのでは?
【ゴールデンレス】
このレスを見た人はコピペでもいいので
10分以内に3つのスレへ貼り付けてください。
そうすれば14日後好きな人から告白されるわ宝くじは当たるわ
出世しまくるわ体の悪い所全部治るわでえらい事です
729デフォルトの名無しさん:04/02/25 21:10
なーおまいら JTA って使ってますか? ORマッパーと組み合わせて使うと
トランザクション管理が楽そうだけど、ググっても情報少ない。

Tyrex は更新止まってるし、JOMT はどうなんだろ。
ORマッパーに付いてるものとかないんかな?
730デフォルトの名無しさん:04/02/25 21:48
>>729

素でSQL叩いたほうが楽ってことに気づいたんだよ
JTAなんざEJBコンテナに任しときゃいいんだ
>>730
いや、だから SQL は素でたたいてトランザクション管理だけは
JTA に任せようかと。。。まー落ち目ってことなんですね。。。
>>732
分散トランザクションの方が主な仕事じゃないの?
ローカルトランザクションは普通にJDBCのConnection#commitでしょ。

XA対応とか調べるのメンドクサイけどな。
>>733
EJB みたいに別コンテナまでのトランザクションはいらんけど、
Connection だと複数のクラスにまたがるトランザクションだと
いちいちコネクション渡していくのがめんどくさいなーと。

JTA だったらスレッド内だったら Connection 渡さなくても良いから
楽かな〜と。俺、なんか間違ってる?
ここで相談していることがな。
>>734
なら、ThreadLocalでConnection渡したらどう?
>>736
うぉぉ。ありがトン。ThreadLocal って名前しか知らんかった。
トリッキーそうだと思って Jacadoc 見たら、用途にトランザクションID とかって
ありました。これって EJB とかが内部で使ってんのかな?
JTAは普通ThreadLocal使って実装。
>>713
+BeanUtilsで、SwingともJSPとも相性いいな、それ。

すごい立派なシステム作るわけじゃなければ、それで平のSQL投げるのが
いちばん簡単なのかもね。
結局RDBMS固有のチューニングテクニックとかのお世話になる羽目になった
とき、平でSQL投げているほうが分かりやすいだろうし。
変な仕組みにSQL生成を任せてしまうと、わけわからなくなって困らへん
かな?

SQLを外部ファイルに切り出して、必要に応じてIDかなにかで呼び出す程度
がええのかな。
>>729
Hibernate + Spring Framework でこんなに簡単にできるよ
http://hibernate.bluemars.net/110.html
>>740
簡単じゃないができてるね。
読むだけで疲れたけど。
Springってすげって思うけど、なんかおやじが説教してるみたいな
感覚するんだよね。
うるせーって感じ。
>>742
この仕事に向いてない人だな。
自由にやられると、周りが困る。
744初期不良:04/02/26 14:15
と言うか O-R マッピングって DB の種類に
依存しないためでもあるんじゃないの?
SQL たたく方が楽ってそりゃそうだけど
じゃあなんで苦労してコストもかけて
こんな事やっているのかと小一時間
>>744
本来そうかもしれんけど、俺は DB 置き換えが必要になった
PJ はあったことがない。あー ORマッパー使ってりゃ楽っだったのに!
とか普通はない。あんた、どう?
「思想的にしたくないことをやらなくてすむ」ってとこに意義があるんじゃないの。
まともなODB出たら、JavaでRDBとO-Rマッパなんか使う人はいないわけで。
>>746
>「思想的にしたくないことをやらなくてすむ」ってとこに意義があるんじゃないの。
結論はこれだと思う。

やっぱりオブジェクト指向な環境では、なるべくSQLなんつー対極的なものは使いたくないな。
ロジック中にSQL埋め込みたくないし(SQLも手続き的ロジックなわけだけど)、かといってSQLを
外出しにしたくもない。
オブジェクトの曼荼羅の中にSQL入れるなんて、清濁併せ呑むって感じがする。
ましてや、WebアプリなんかでPHPの中に、HTMLと一緒にPHPのロジックとSQLを混在させるような
腐った設計なんてのは問題外じゃねーの。

以上、個人的好みが多めだけど、客観的なOOP論は少なめ。これ。
オブジェクト指向は万能ではないってところも押さえないと。ね。

とりあえず、Hibernate / Cayenneマンセー
Torque / JDOはウンコ。
748初期不良:04/02/27 00:12
>>745
確かに DB 置き換えと言う事はあまり無い。
ローカルのテスト環境で別 DB を入れてテストするくらいかな。
けど、プロジェクト単位で DB 入れ替えとか言う話じゃなくて
こっちが複数の DB の独自仕様を意識しなくていい
と言うところじゃない?

思想的に、っていう話もわからないでもないけど、
漏れの場合は必要性如何に関わらず、抽象化を
進めた先に何かがあると信じてついて行く所存なり。
データをグラフ化したら違う何かが見えてきたってな感じのね。
これからは、1つのオブジェクトに、物理的に異なる鯖に配置されてる
アーキティクチャのことなるRDBのテーブルをマッピングして使う、
なんていうことが当たり前にできるようになりそうだね。
WebObjectsのEOFなんかが、かなり前から実現していた世界だけれど。
それがLGPLやASLなんかの製品でできるようになることの
ビジネス的なインパクトってどのくらいあるかな。

>>749
EJB
>>747
> とりあえず、Hibernate / Cayenneマンセー
> Torque / JDOはウンコ。

おい、マンセーの理由を教えてください。
>>751
個人的好みです。
使いたいものをプロジェクトの性格に併せて選択すればいいです。
JDBC+生SQLという選択肢も当然アリかと。
>>750
大規模案件には当然EJBっていう選択もありですな。
でも、中小規模案件にEJB(J2EE)適用すると、逆に工数増えるケースが多い罠
754デフォルトの名無しさん:04/02/27 00:30
誰か OR マッパー比較表を作れるネ申はいませんか?
英語が不自由な漏れはダメポ。

例えばこんなん。(2ちゃんねるブラウザの比較表)
ttp://www.geocities.co.jp/SiliconValley-Sunnyvale/7562/
>>754
藻前さんの欲しいネタは、コレかい?
http://c2.com/cgi-bin/wiki?ObjectRelationalToolComparison
>>755
おわ!ありがトン。
。。。なんか表がずれてる。漏れだけ?
>>756
表がズレるやつぁ〜漏れんとこに来い!
漏れもズレてるから心配するな♪
Hibernate使うとき、Eclipse用のjFaceDbcプラグイン使ったら、
自動でスキーマ抜いたソースと、マッピングファイル作ってくれるよ(感涙)
ついでに、Hibernate開発チームのSteve氏が、サンプルソース大盛りで
DAO実装周りの解説してくれてるページもあった。
ttp://forum.hibernate.org/viewtopic.php?t=925108

もうこれは人として号泣するしかない。
Hibernateで、session.clsoe()してもDB側のコネクションが残っているんだけど、いいの?
SessionFactoryを最後にclose()してやると、完全に切れるみたいだけど。
これをやっていいのかどうか、確信が持てない。
>>729
Tyrexは1.0.1が出てるよ。元の開発元は放置してるらしく別のとこがやってるみたい。
1.0の時は悲惨なバグがちらほらあったなぁ。endResource()あたりのリスト繋ぎ換えで
循環リスト作って無限ループとかw今は完全に捨てたんで状況は追ってない。

JOTMはもっと酷かった。コネクションプールの実装が腐ってて、切れても永遠に
持ちっぱなしで、さらには仕様レベルで設計間違ってるから直す気おきなかったよーな。。

現在はJBossをJTA/JTSサーバとして使う形で落ち着いてます。
EJB鯖としては使ってないけど、自作のCMT実装も作ってあったので。
設定もすごい簡単だし、Tomcat+JTA/JTSというつもりで使うのもいいかも。

>>733
それも重要な仕事だけど、実際はそれだけじゃなくて、トランザクション管理のコードを
プログラマの管理下から切り離して書けるメリットの方が大きいと思うよ。
>>734が書いてるような使い方も容易にできるしね。

>>738
既に正式な仕様で決まって、それなりな実装(JBoss)もあって、WebLogic/WebSphere
みたいな商用サーバにも移行できる状況なのに、なんでわざわざそんなことすんの?
フレームワーク(Strutsとか)使って必ず通るコードを規定できれば、EJB使わなくても
そこでJTA叩くコード書けば十分じゃない?

遅レス+長文すまん
761738:04/02/28 00:27
あー失礼。
JTAは普通ThreadLocal使って実装"されてるんだよ"、と
すぐ前の人に教えてあげたつもりだった。
762760:04/02/28 00:39
>>761
スマソ。736に対する誤爆でつ。。
Hibernate は JTA がサポートされていて、直接 JTA を叩かないでも使用できる。
Spring には JTA 抽象化レイヤがある。

> フレームワーク(Strutsとか)使って必ず通るコードを規定できれば、EJB使わなくても
> そこでJTA叩くコード書けば十分じゃない?

禿げ同。本来トランザクション境界は狭いほうが良いが、EJB の宣言型トランザクション
なんかめんどくさすぎる。基本的に境界はフレームワークの最初と最後で良いと思う。
764デフォルトの名無しさん:04/02/28 01:14
>>745
>本来そうかもしれんけど、俺は DB 置き換えが必要になった
>PJ はあったことがない。あー ORマッパー使ってりゃ楽っだったのに!
>とか普通はない。あんた、どう?

自分もDB置き換えはあまり経験無いなぁ。
とりあえず、フリーのDBで作って、規模が大きくなってきたら商用DBに移行というのはあるかもしれんが、
最初からOracle使ってる場合は、DB置き換えってありえなくない?
OracleからpostgreやmySQLってパターンあるのかな?

自分の担当してるプロジェクトでトルク使うっていう案があるんだが、DBはOracleで決定済み。
SQLに精通したメンバーも数人いるので、JDBC+PL/SQL使用に間しての技術的な障壁はない。
現在、いろいろと調査してる段階なんだが、少なくても今のところは導入メリットが見えない。

ところで、トルクでOracleのrownumとかpostgreのlimitのようなことは可能でしょうか?
765デフォルトの名無しさん:04/02/28 03:18
>>764
Jakartaスレにあったと思うが...
Oracle使ってsql書ける要員がいて、ストアドが使えるのならば
それが一番じゃない?
>>764
DBAがいるんだったら、Torqueなんてのはおすすめできない。
もしやるんだったら、iBatisとかいいんじゃない?
>>766
iBatisを語ってくれ。
Springでもサポートされて注目株だよね。
iBATIS Database Layer って SQL を XML に定義するタイプなんだね。
トランザクションとかプールもサポートしてるみたい。

誰かがダイアリーに Database レイヤも MVC と見るべきで、Model がテーブル(ビュー含む)、
Controler が SQL、View が ResultSet のような結果だって書いてたね。
レイヤとして切り離した場合、やっぱり SQL でええやんって流れなんか?
ストアドを DB に置く、SQL を Database レイヤに置く、似たようなもんか。
Hibernate + JFaceDbcマンセー!
RDBのマッピングについて調べ始めて、
へー、こんなスレあったんだー、と思って>>1まで戻って読み返す気になった。

って、
あと一ヶ月で、立てられてから、1年たつんだな、ここ・・・。
>>770
じゃ、読んだあと 1 年前から今までの ORM 動向を
客観的にまとめて書き込んでください。
とりあえず日本じゃトルクマンセー派が多いんだけど、
使ってみたらハイバネートがいいようだな。
遅延ロードとか関連づけとか、テーブル操作も
HQLとCriteriaの使い分けができるしな。
日本語情報が豊富ならカイエンもモデリングツールがついててよさげだけど、
ハイバネートのようなかゆいところに手が届くほどの機能ではなさげ。
シンプルさでは良いかも。
JDOとか、OJBは、マッピング作業自体の手間とか後のメンテ考えると、
かなり使い込んだハイスキルな人間でないと使いこなせない気がする。

って、漏れは>>770じゃないけど、そんなことを思ってみるテスト。
>>768
MVCって、どのレイヤー間接続においてもそういう見方にするんでわ。
Springを覚えてからそう考えるようになった。
Hibernate > Cayenne > DbUtils > OJB > Castor > Torque
総合的にこんな感じか? DbUtils はとりあえず。。。
775デフォルトの名無しさん:04/02/28 19:51
>>773
本来のMVCでは、言われるような不思議な区分けはしないと思いますが。
そんなつまらないことを考えるのならば、BCEで普通にロバストネス分析
していけばいいはずです。
(無知故にMVC Model2をMVCと称し、しかも拡大適用していたのならば
 話は分かりますのが)
DBUtilsでRDBのテーブルをそのままマッピング、
テーブルとBeanは1対1対応・・・。
処理は結合も含め、全てJavaでやる・・・。
→RDBとJavaはほとんど完全に分離。

↓パフォーマンス的に問題あり

DBUtilsでRDBのテーブルをそのままマッピング、
集計処理が必要な場合、複雑な連結が必要な場合はView使用、
Viewも含め、Beanとデータベースの実体は1対1対応・・・。
→システムの一部がDBに入るので、DBの入れ替えは難しくなる。

ってやったら、小さい会社の社内システムくらいなら、簡単でいいかなあ・・・
そんなに導入にリスクもなく、学習の手間もなく、
恩恵は十分に、ってことで。

市販のDBMSでは、システムが大きくなるほど拡張キット(w が必要になってくる。
DBMSを使い込んで、運命を共にしましょうってところが多いってこと。そんな所
では、DBMSの移行だけで大仕事になるやね。
そもそも限定された言語環境からだけしかDBMSにアクセスしないなど、統合システム
ではあり得ないし。そこに言語限定の O/R mappingをもってきてもねえ。(w
ストアドにしておけば、建前上はどこからでも使用できて便利だし。

http://pc2.2ch.net/test/read.cgi/tech/1019996589/751
>俺もできればストアドプロシージャの方が設計としていいと考えている。
>こんな感じ。

> EJBのCMP/BMP
>  < DAOパターンのPOJOにまとめる
>  < ストアドプロシージャ

>単一DBMSと単一アプリによるシステムならまだしも、
>複数のシステムから同じDBMS(の同じDBスキーマ)を操作したりするなら
>ストアドプロシージャのほうがいいね。

>ましてや EAI のために統合DBを作りましょうなんてレベルなら、
>確実にストアドプロシージャにすべきだ。

政治的な話が絡んでこないような小さいシステムしか構築しなくていいのなら、
それこそ何でも使えばいいんじゃない?
778デフォルトの名無しさん:04/02/28 23:09
>759
Connection Poolが有効になっていないか?
>>777
やっぱJavaストアドプロシージャだよね。
>>777
DBの移行はありえない前提で、
ビジネスロジックをできる限りDB(ストアド)に入れてしまえ、と言っている?
>>780
政治的な話が絡んでくるのだから、DBの移行は非常に難しいだろう。
無条件にストアドで実現するのは、バランス感覚を欠きオカシイすぎる。
>>777
で、ストアド使うとして Java プログラムからは何でアクセスしてますか?
JDBC 直接ですか? トランザクションはどうしてますか?
いたずらにストアドに詰め込みすぎるのは保守性が下がっていいことないと思う。

と思っていたんだけど、>>779が言っているjavaストアド。
ttp://otn.oracle.co.jp/tech/java/jsp/
正直に知らなかったよ・・・。

これだとDBにべったりで、javaシンタクスで直接テーブルの内容を操作するような、
通常とストアドとまったく同じものを作れる、って事になるのかな?

だとすると、じゃあ、こんどは、DBの移行を考えないなら、
そして、一つのRDBを複数のシステムで使う場合、
これでDBシステムにビジネスロジックを全部盛り込んでしまっては
いけない理由は何だろう、と思ったり。
ちゃんと調べてないのでぜんぜんjavaストアドってのを誤解しているかも知れないけど。
さて。

だいぶすれ違い気味だけど、言うだけ言ってみる。
>>783
今すでにある JDBC でアクセスしてるクラスをストアドとして
DB に突っ込むだけ。
ん?じゃ、ORマッパ使ったクラスをストアドとして DB に
突っ込めばいいのか?って出来るんかな。
情報処理は土建と一緒だから、言われたことをこなすのが一番儲かる。
Javaストアド使えるのはOracle、DB2、PointBase、Sybaseくらい?
OracleのJavaストアドは、こんな感じ。
(詳細は、各種資料をどうぞ)
public static String sal_grade (String empname) {
  float current_sal;
  #sql {select salary into :current_sal from emp where ename = :empname };
  if (current_sal > 0 && current_sal < 50000) return “ MTS”;
  if (current_sal >= 50000 && current_sal < 100000) return“ SMTS”;
  return (“Salary out of Range”);
}

>>783
うまく言えないんだが。ストアドでロジックが書けると言っても、何となく
これ以上のビジネスロジックは含めないでおこうというのは、PL/SQLの頃
からあったわけで。で、Javaでロジックが書けると言っても、その範囲を
大幅に超えてしまうのは抵抗がある。この辺りがバランスというやつだが、
人により感覚が違うと思うので、そういう意見もあると思ってほしい。
>786 一応PostgreSQL 7.4以降も該当するかな
http://gborg.postgresql.org/project/pljava/genpage.php?userguide
>>775
「達人プログラマ」読みなさい。
多層化や各レイヤを MVC と見るとか、どんどん分化している。
で、それを鵜呑みにして、そのまんま自分の PJ に適用しようとする香具師は
どうかしている。

例えば数十万人日の PJ があったとしたら極端な話、100 階層、各 MVC でも
いいと思う。管理できればだけど。
逆に小さなプログラム(PJまでもいかない)、DB内容を 1 画面表示させるだけで完結
するようなものだったら Servlet に直接 JDBC 書いて JSP だけで十分。
Servlet だけ JSP だけでもいい。
>>776
DbUtilsのためにわざわざViewなんて作らなくてもいいのに
DBの置き換えってなんとなく(社内の)開発環境から
(顧客の)開発環境に移すときにおきそうな気が。

特にOracle8iから9iへとかさ、普通のOracleから9iRACとかさ。
異なるバージョンだけどおおよそ一緒だろって感じで使ってるの多いような。

プライムで仕事とってるSIerでも社内の開発環境にはなかなか
金かけたがらないからあちこちのプロジェクトで環境共有してそうなんだけど。
>>792
どういう意味? 開発(&テスト)環境と本番環境で DB が異なるってことか?
794デフォルトの名無しさん:04/02/29 15:03
>>791
じゃあどうしたらいいのでしょう?
795デフォルトの名無しさん:04/02/29 23:29
開発用と本番用が違うってかなりつらいね。
というか危なすぎない?
うちでは、できるだけバージョンまであわせて用意するんだけど。
>>790
開発側の都合でしかない部分については、「開発にとって適当な粒度」
で分ければいいって話は、MVC云々以前の話やん。当たり前やん。
797792:04/03/01 01:01
>>793 >>795
顧客の本番環境&テスト環境は買ってもらえる(顧客のお金)。
でも開発は自社でやるから、社内環境は自社の金で
準備しなきゃいけない。

って状況だと、よほどお金のあるプロジェクトじゃないと
専用の環境が作れなくない?
3ヶ月で回るプロジェクトが何本もあるとどうしても環境を
いくつものプロジェクトで共有することになる。
当然複数バージョンを同居することも難しくなる。
(保守のために環境残す必要もあったりするし)

まあ、社内がPostgresSQLで本番がOracleなんて極端な
違いはないけど、Oracle8iでも細かいところが違うのなんて
よくあると思う。

>>792にも書いたようなRACみたいなH/W巻き込んだ環境は
社内では作れっこないので確実にこういう状態だな。
DBUTILSとVIEWっていうのは実行速度の問題?
>>797
まじで? 俺も結構な数の PJ やってきたけど開発環境と本番環境の
DB のバージョンが違うってのは無かった。
ってか、ありえんと思ってた。

で、いざ本番で動かしたら動かん、手戻りってのはないの?
O/Rマッピング技術は、そうした環境の差異から生じる影響や問題を、
最小限にとどめてくれるっていう側面もあるんじゃないかな。
WebObjectsのEnterprise Object Frameworkとかは、そうした
ウリもしてたしな。
開発はデフォルトで入ってるOpenBaseでやって、そのままOracleに持って行くとかできるそうだし。
最小限にとどめるってのは分かる。でも保証がない。
手戻りによる人的被害、莫大な損失、信用問題が出ないとは言い切れないよね?

バージョンちがうから動かなかったら許してね、規模の PJ なら
なら問題ないと思う。
それ、なんでもそうだよな。
「これこれ、こうやると早いし簡単なんです。これでやりませんか。」
「それって、これこれこういうときって大丈夫?」
「うーんたぶんだいじょぶだと思いますけど?」
「確信できないなら、今回はちょっとやめといてもらえます?」
(うー。自分で責任持つともいえないから、じゃあ、やめとくか。たぶんだいじょぶだと思うんだけど・・・)
って感じ。
803792:04/03/02 01:03
>>799
周辺ではバージョンの違いに起因するような細かな機能は使ってないから
助かってるんだろうね。
DBっていったって単にSELECT/INSERT/UPDATE/DELETEしてるだけ
なのが多いから。
当然手戻りのリスクはあるが、環境作るコストと比べたら小さいと踏んでるわけだ。

まあ、たまたま周りがそうだっただけかも知れんけどね。
会社移っていきなりこうだったのでカルチャーショックは受けた。
804デフォルトの名無しさん:04/03/06 21:04
このスレ見てDbUtils使ってみようと思ったんだが、OracleだとINTが
BigDecimalになるんで値をセットしてくれない。
Oracle使いの人はどうしてんの?
Oracleは、Oracle社の各製品に囲われないと幸せになれないんです。
>>804
それだけじゃなくほかにも幾つか問題ある。
Oracleでテストするだろう普通 -> DbUtilsの開発者
今のところはソースに手を入れるしかないんじゃないかなぁ。
で、本家に報告汁。
漏れは、Oracleでテストしていない段階で使うのあきらめた。
>>804
そのために RowProcessor 実装できるようになってんじゃないの?
いや、使ってないんで知らんけど。
当てずっぽうだけど、DBUtilsのせいというよりは
OracleのJDBCドライバに原因があるんじゃないかな。
NUMBER型の列に対して
ResultSetMetaData#getColumnClassName(int)を呼び出すと
BigDecimalを返すようになっているとか。
DbUnit使ったときに同じような問題(SQL NUMBER型がBigIntegerで返ってくる)が出た。

今、手元にOracleが無いので試せませんが。
実際、Oracle使いはRowProcessor自前で実装してんのかね?
なんだか、単純に実装するとテーブル毎にRowProcessor書いて
しまいそうだし、そいつを共通化しようとするとBasicRowProcessorの
再実装になっちゃいそうな気がしたんだが。

BasicRowProcessorのいくつかのprivateメソッドがprotectedだったら
再利用してサブクラスで簡単な拡張するだけでいけそうなのに。

ColumnProcessorが導入される1.1に期待か。
DbUtilsは手軽さがウリなわけだから、Beans側のプロパティの
型がObjectだったら型チェックせずに無条件でセットして、あとは
自分でバンバンしてね、くらい割り切ってよかったと思うんだけどね。
811デフォルトの名無しさん:04/03/07 15:13
Beanとテーブルを1対1で対応させる場合、テーブルの結合が必要なものはどうするのが良いですか?
Beanの作成方法と、DAOを使用した時のDAOクラスの実装方法(AとBを連結した場合、
どっちに実装するとか)について悩んでます。
>>776 のようにViewを作成する場合は数が多いと大変ですね。
IDでマスタから検索したNAMEをトランザクションテーブルにinsertとか結構あると
思いますが。
>>811
だまってHibernateつかえ
>>811
おいらはDAOにA.setB()とかB.setA()とか他の結合可能なDAOを設定できるメソッドを作って、
クエリ時にSELECT文とJOIN文を自動生成する実装を書いたことがある。
ただしカラム名の重複には注意すること。
Oracleは一部の仕様がクソ過ぎ。
number型の場合BigDecimalで返すのはすごい桁数の数字返す可能性があるからしょうがないとしても、
varchar2で4000って指定したら4000byteな上に、JDBCから書こうとすると1文字3byteで計算しやがるのはどういうことよ。
おまえら、ここら辺どうやって対応してるの?
>>814
3byteで計算して余分な空白埋めやがった上に、
それが原因で、カラムの最大長を超えるってどういうことやねん。
読み込んだのを書き戻せないジャン。

後続の空白は、トリムもしくは指定のbyteを超えた分を
切り捨ててます。

この辺はフレームワークで吸収して欲しい。
>>815
varchar2をStringで取り出すと空白は入らなかったような。
charだと空白入ってくるけど。
>>814
禿げ同。仕様と言い切る Oracle は糞。殿様商売で感覚が麻痺してるとしか思えん。
俺は 8i でそうだったけど、9i、10g でもその仕様のままなんだろうか?
>>817
10gはしらんが、9iでは変わってない。
ダメすぎ。
>>814
よう知らんのですが、SQLServerのvarchar(バイト単位で格納)に対する、
nvarchar(ユニコードで格納)みたいなのはないの?
820デフォルトの名無しさん:04/03/09 11:11
CastorとHibernateを比べた人っていますか?
今度WEBサービス(SOAP・MESSAGE)でORマッピングやろうと思ってるんですよ。
Castorを使ってテストで買い物サイト作ったことがあって結構いいかな、って思ったんですけど
結構Hibernate良いって言っている人もいるっぽいので。
どうでしょうか?
Hibernateは、jFaceDbcプラグインと組み合わせると、
スキーマのリバース&ソース自動生成ができるのが(・∀・)イイ!
middlegenとcodeジェネレーターつかうのといっしょ?
middlegenの方がリレーション見てくれる分、一歩リード
middlegen使ってコード生成するのって、
XMLとか書かないとだめ?
middlegenのDBの設定とかは
XMLファイルでやるんじゃなかったっけ?
プロパティファイルだったか?
jFaceDBCは、DBに接続すれば、マッピングソースと設定ファイルを
イッパツ生成してくれんだね。
JFaceDbc ってリレーション見てくれないのか・・・
?外部キー見てくれないってこと?
>>828
そう。要は1テーブル分しか作れない。
>>809
BasicRowProcessorをコピペして、
ConvertBigDecimalRowProcessorとかいうのを作って対応しました。

将来的には、標準で対応されるだろうから、
それまでのつなぎと思って使います。


831デフォルトの名無しさん:04/03/18 20:10
hibernateで・・・
832デフォルトの名無しさん:04/03/18 20:11
hibernate使っている人います?
います。
834デフォルトの名無しさん:04/03/18 23:12
>>820
HibernateもCastor JDOも両方使ったことあるけど、
Hibernateの方がO/Rマッピングの自由度が高いし、
クラス設計上の制約も少ないからやりやすいよ。

ORマッパー + IoCコンテナ サイキョー
EJB のトランザクション制御イラネー

とりあえず Hibernate + SeasarV2 に期待。
もうすぐ春ですね...
>>836
コピペ厨Uzeeeeeeeeee!
>>835
その組み合わせで何がうれしいかというと
EJBっぽく宣言的トランザクションができることかと。

あと、EJBのトランザクションはRDBMSだけじゃないよ。
>>838
コード中でも宣言できるし、POJO で宣言トランザクションできるってのが
大きいと思う。DbUtils とかと組み合わせたりとか。

EJB のトランザクションって RDBMS 以外にどんなのが使われてるの?
>>839
JMS(WebSphere MQ)
ちょっと気取って見ませんか
恋をしてみませんか
843デフォルトの名無しさん:04/03/20 16:08
Hibernateで、Ehcacheを使っています。
キャッシュのオブジェクト上限値(maxElementsInMemory)を設定して
いますが、上限値を超えてもキャッシュから取得できてしまいます。
overflowToDiskを"false"と設定した場合は、キャッシュから削除される
と思っているんですが、他に設定等あるのでしょうか?
よろしくお願いします。
Seasarってライセンスどうなってんの?
ライセンスが英語なんで分からんす・・・
ttp://seasar.sourceforge.jp/
>>844
ひとことでいえば、「好き勝手に使っていいぞゴルァ!」ってこと。
>>845
んなこたあない。

ASL 1.1ライクなライセンスになってるので
http://www.terra-intl.com/wiki/?Apache%2FSoftware%2FLicense
でも参考にしてくだしあ

宣伝条項も忘れずにね
hosh
http://pc5.2ch.net/test/read.cgi/tech/1068207164/l50
このスレの721です。Strutsを使われている人が居たら
アドバイスを頂けたらと思います。

私はHibernateを使っています。HSQLでテーブル名を全部大文字
にしたら怒られた(実行エラー)のって私だけでしょうか・・・。
>>848
とりあえず、質問の仕方の基本や、掲示板のマナーを理解してから出直してくれるか?
850848:04/03/31 08:43
ごめん、全然マナーが悪い事してないと思っているんですが。
マルチポストだと思われてるんでしょうか。
流行の言葉で言えば、TrackBackみたいなものだと思っています。

是非理由を聞かせてください。
>>850
使ってるDBMSは書いていないわ、JDKやHibernateのバージョンは書いていないわ、
どういうコードでそうなったか説明していないわ、レス番号を指定しないでリンクを貼るわ…

一番の基本を言うと、それで動くかどうか、まず自分でやってみろよって話だよ。
あとは自分で作ったBeanの役割くらい性格に理解しろ。
フレームワークの情報交換やそういうレベルの話ではない。
ここはサポートじゃないんで、まず基本を理解しているのかも怪しいうえに
実際に試しても見ない奴に、誰も回答はやらないよ。
>>851
は・げ・ど・う
自助努力無しの他力本願厨か。典型的だな。
主張ばっかりで責任は果たさんと。
854848:04/04/02 08:39
ごめん、ごめん
>私はHibernateを使っています。HSQLでテーブル名を全部大文字
>にしたら怒られた(実行エラー)のって私だけでしょうか・・・。
これは質問っていうか愚痴。Fromの後はテーブル名でなく、対応するうクラス名
なんだね。激しく勘違いしてました。

>レス番号を指定しないでリンクを貼るわ…
721って書いて在るじゃん・・・。
>>854
では、これからは
http://pc5.2ch.net/test/read.cgi/tech/1068207164/721
と書くようにしてください。
重要なのはこの辺だろ、ボケ

>一番の基本を言うと、それで動くかどうか、まず自分でやってみろよって話だよ。
>あとは自分で作ったBeanの役割くらい性格に理解しろ。
>フレームワークの情報交換やそういうレベルの話ではない。
>ここはサポートじゃないんで、まず基本を理解しているのかも怪しいうえに
>実際に試しても見ない奴に、誰も回答はやらないよ。
848ってそんなに激しく突っ込む書き込みか?

それより漏れは
848>>HSQLでテーブル名を全部大文字にしたら
851>JDKやHibernateのバージョンは書いていないわ
HSQLとSQLを勘違いしてるって何故に突っ込まない?
JDKのバージョン云々こっちの方が笑える。

俺的に重要なのは
>あとは自分で作ったBeanの役割くらい性格に理解しろ。
だけだな。実際やってみてるから、エラーでつまずいてんだろうが(アハ
DTOはそもそも冗長なもので、848はFormとテーブルがまったく同じに
なっちまったから、なおさらその冗長性を疑問に思ったんだろ。

そろそろ、スレの本題に戻ろうか。ってもネタが出尽くしてる
みたいだが。
Hibernateで、複合キーを使ったselect方法は、どんな感じ?
>>857
やってみてエラーになりましたなんて一切書いてないぞ。
同じようなクラスが出来るけど、共用できるんですか?だろ。
やって正常に動かないなら、質問するまでもない問題。
>>859
わかったから。もういいよ。
>>859
まー、お前が何人かをムカつかせたのは事実。
2chごときでのコミュニケーションスキルが足りないってこった。
もう書き込むな。素直にROMしてろ。
>>860-861
そんなに悔しかったのか?
指摘した奴がむかつかせたのは質問者だけ。
質問した奴がむかつかせたのは見ていた奴の殆ど。
863857:04/04/04 23:34
>>859
>同じようなクラスが出来るけど、共用できるんですか?だろ。
Strutsスレの方よく読んだか?出来る出来ないの話じゃないだろ。
すべきか、すべきじゃないかの設計の話。それとも絶対に出来ない
とでも言いたいのか?
>やって正常に動かないなら、質問するまでもない問題。
動く動かないの話じゃない。
だから851の書き込みも
>あとは自分で作ったBeanの役割くらい性格に理解しろ。
って設計の指摘になるんだろう?

>>858
JDKのバージョン書かないと、変なのに絡まれるぞ(ワラ
ちなみにこんな感じか。
session.find("from Test where key1 = ?, key2 = ?",
      new Object[]{"test", new Integer(1)},
      new Type[]{Hibernate.STRING, Hibernate.INTEGER})
手元に動く環境が無いから間違ってたら、きもいやつか、まともな
人が突っ込んでくれるだろう。検索キーが多くなったらcreateSQLQuery
で使うと、いいかもしれん。

もう少しマターリやろうや。
>>863
> もう少しマターリやろうや。

とか言いながら、一言多いね↓

> 手元に動く環境が無いから間違ってたら、きもいやつか、まともな
> 人が突っ込んでくれるだろう。
>>863
複合キーセレクト、クスコ!
明日試してみるね!
>>863
各Beanがどうしてそういう構造になって、どういうデータが入って、
入ったものの状態がどうなって、それを踏まえたうえで
分けるべきかどうかの理解をしていないんだから、
分ける分けないの回答だけ教えても意味ないんじゃない?
親切な君が向こうのスレで、手取り足取り一から教えてあげれば?
荒れた原因はこの一言に尽きるな

>>850
>全然マナーが悪い事してないと思っているんですが。
>>863
>Strutsスレの方よく読んだか?出来る出来ないの話じゃないだろ。
>すべきか、すべきじゃないかの設計の話。それとも絶対に出来ない
>とでも言いたいのか?

読解が2者に分かれている時点で、質問が悪いんじゃないかと思う。
まぁ、どっちにしろ、2chの使い方が解らないんだったら、
偉そうにマナー違反ではないですなんて言わずに、もう半年ROMれってことだ。
TrackBackって言いたいだけちゃうんかと。
リンクだけ張っても、元スレが過去ログ行きになったら
なんの話だかも解らなくなるわけだし。
無意味な叩きレスに嫌悪感を示すレスがつくだけでも、
まだ、このスレはいいほうだってのが分かるな。
871デフォルトの名無しさん:04/04/06 01:34
JOINするならHibernateタンで決まり、ということらしいですが
プロジェクトの都合でDAO自作の場合に設計とか
参考になる書籍・サイトはありますか?

Entityクラスのリレーションオブジェクトを取る時に
・Entity#selectRelation(key)みたいなのを定義すると
Entity is DAO になるんで悪い設計?
・フェッチするときにリレーションまでごっそり取得して
Entity has Relation(Collection)で持たせるのはあり?

とか悩みます。
>無意味な叩き

だれも質問の仕方の悪さや、掲示板の使い方を指摘しないと、
厨房的な振る舞いの奴ばっかりになって荒れるぞ。
誰かが悪役を買って(まぁ匿名だけど)注意してくれるから、
掲示板のルールというものが維持されていくのではないかと。
>>871
現時点で一番認められている Hibernate を参考にすれば?
書籍とかサイトでは Hibernate 以下しか望めない。
Seasar2がHibernateに対応したようだ
対応って、具体的にどのような方法で?
>>876
クスコ
878デフォルトの名無しさん:04/04/11 19:27
JavaのORマッピング・フレームワークを7〜8年前からやってる者です。

DAOのGeneric化は、現在のJavaではできない、という説がこのスレで囁かれているようですが、
そんな事はなく、Java 1.02レベルでも充分できるはずです。
以上、ご参考情報でした。
このスレなんとなく荒れてたみたいだけどw

ここで荒らしてる人物、俺が数年前に情死す板でORマッピングのレクチャーしてやった厨房のような気がする。
奴はルサンチマンの塊で、趣味はスレ潰しだから、放置しておくのが一番だよ。

君が言っている、潰そうとしている厨ってどっちの人?
アホな質問して逆切れするほう?それを注意するほう?
レクチャーだって・・・
なんか恥ずかしくなる・・・
こんちわー、報知新聞のほうから来ましたー。
巨人阪神戦のチケット、差し上げますー
>>882
品川駅の方面の業者さんですか。
わざわざご苦労様です。
Hibernateでストアドプロシージャー呼びたいときって、
SessionFactoryからsessionもらって、そこから connection()メソッドで
JDBCコネクション(java.sql.Connection)を得て、
あとはCallableStatement使ってSP呼んでやればいいのかと思ったんだけど、
SPが実行されないような感じ。
だれか成功してる人いる?

ふつうに、DriverManager#getConnection()使うと、問題なくSP呼べるんだけど。
885884:04/04/12 16:26
解決しますた。
使ってるRDBMSが、IBMのDB2 v8.1?だったんだけど、
スキーマ名を指定してやらんといけない場合に、SP呼ぶときだけ
スキーマ名がCase Sensitiveだった。。。
イメージとしては、

session = factory.openSession()
connection = session.connection()
CallableStatement stmt = connection.prepareCall("CALL SCHEMA-NAME.sp(?)")
stmt.execute()

ってな感じだった。
吊ってくる。。。
886デフォルトの名無しさん:04/04/12 21:19
>>878
レクチャーしてくれ。
>>878-879
Gimme a lecture!
888デフォルトの名無しさん:04/04/20 11:07
Hibernateで、hibernate.cfg.xmlでconnection.pool_sizeを指定できるわけだけど、
ここで設定したコネクションプールをきちんと使えているかどうかの確認って、
どうやったらいい?
SessionFactoryからsessionを取得した複数オブジェクトに対して、
System.identityHashCode()
を用いて確認を試みると、1カ所のメモリしか使ってないような印象を受ける。
889888:04/04/20 14:46
自己解決しますた。
hibernate.cfg.xmlに、プーラーの設定せんといかんかった。。。

<property name="c3p0.min_size">1</property>
<property name="c3p0.max_size">3</property>
<property name="c3p0.max_statements">10</property>
<property name="c3p0.timeout">100</property>
<property name="c3p0.validate">true</property>
<property name="hibernate.connection.provider_class">net.sf.hibernate.connection.C3P0ConnectionProvider</property>

こんなかんじ。
max_size超えた接続時には、ちゃんと待ちになってくれるようになった。

最初は、プーリング設定は
<property name="hibernate.connection.pool_size">3</property>
これしか書いてなかった。。。
これって、built-in poolingってやつかな?
プーラーはc3p0使った。Hibernateにも同梱されてる。
(ttp://sourceforge.net/projects/c3p0)
890デフォルトの名無しさん:04/04/21 09:29
チュートリアルとかに出てる、ThreadLocalを使った
HibernateUtilなんていうクラスでセッションを取得する場合、
コネクション・プーリングは有効なんかね?
Cayenne In Action マダーー!?(AA略
892デフォルトの名無しさん:04/04/27 23:52
DBUtilsって結果がリストで返ってくる、ってことはメモリ上に乗っかるんだよね?
数万件オーダーの結果が返ってくるようなWebアプリで使うのは、やっぱり避け
るべき?

これが心配でTorqueも回避したんだけれども。
ああ、それは俺も気になってる。
BeanutilsのDynaBeanとか。
RowSetDynaClassの間違い。
895デフォルトの名無しさん:04/04/28 00:27
>>890
HibernateUtilで実装されているセッション取得方法だと、
コネクションプールは使わないだろ。
SessionFactoryから、openSessionだかなんだかしてやるべし。
(SessionFactoryは、1つのRDBに対しては必ず1つであるべきらしい)
んで、設定ファイルにもちゃんとプーリング設定すること。
ConnectionProviderを設定しないとプールは使われない。
>>892
よくはしらんが、逐次streaming処理っぽいことをやるんなら
ResultSetIteratorをつかうか、独自にResultSetHandlerを定義すれば
よさげ。ただ、もともと薄いDbUtilのラップがさらに薄い感じになるんで
あまり旨味はないかも。
>>892
Hibernate使えば?1回の取得件数とか指定できるよ。
ページング処理みたいな感じで。
898デフォルトの名無しさん:04/04/28 06:55
RDBの人の会話って、
だから何?
つうくらい薄っぺらくてやんなる。
フレームワークやクラスのデザインするわけでもなく、
「ただ〜というフレームワークでは〜という機構を使ってるから、順当な設計では〜は無理」
って、アタマ悪そうな会話だよな。
理想のSQLなりRDBなりを忠実にモデリングした言語使いたいなら、
PL/SQLでも使ってろって感じ。

でも、そーゆー普通の人々でも仕事こなせるような環境が、工学的には良い環境、
なのだという事実に思いを巡らせると、うーん、(自粛
>>897
あれこれ言いたい気持ちは理解できる。
でも、便利なモノがあって、アーキティクチャまで理解せずとも
効率と品質がある程度確保できることがそれなりに把握できていれば、
それを選択することは間違っていない。

世の中は、「道具を作る人」と「その道具を使う人」がいる。
全員が作る人になったら意味ないだろ。

それに、ここは、Java<->RDBのマッピングフレームワークを語るスレだ。
おまいさんが語りたい内容とはスレ違いだと思われ。
RDB自体か、フレームワークやクラスをデザインすることを語るスレに逝け。
900デフォルトの名無しさん:04/04/28 12:30
>>898
だから何?
>>898
これだから、理論屋は使い物にn(ry
WebLogicはどのマッピングツールをサポートしてるの?
こいつは理論屋にもなれない知ったか厨だろ?
つまりPL/SQLって言いたかっただけと。
はい、よい子のみんな、O/R-Mappingを語ることに戻るよ〜
DbUtilで十分
>>899-906
おまいさんら、ORマッピングの目的って、何だと考えてるの?
問いかけのない無目的な行為は、地獄への直通列車だよん。
908RDB素人 (永遠に素人のまま済ませたいものだ):04/04/30 01:45

ところで、最近 Result Cache って普及してるの?

ResultCacheっておおまかに言って、
同じqueryで検索対象が更新されていなければ、キャッシュした検索結果を返す機構で、
KIVA AS〜Netscape AS〜iPlanet iASの系譜でJavaによる初期の実装が行われてたらすぃ。(@ITに関連記事あり)
2000年頃には、既にResult Cacheという単語がGoogle上からすら消えていて、
Oracle8iかなんかが似たような機構を次期リリースで提供、とかいう話は確認したのだけれど。

なんでこんな古い話題を振るかというと、KIVAのメンテ&アプリサーバ変更の話が(ry
日本ネットスケープの残党はどこに(ry
909908:04/04/30 01:48
そー言えば、20世紀末期には、ASといえばKIVAの時代があったなあ〜。
AS〜KIVAの情報収集で、ちゃっかり海外出張した上司は、今ナニをやってるのやら
KIVAってなに?
そういやCayenneって、スキーマ情報ぶっこぬきツールが付いてるのな。
まだ試してもいないけど、リレーション情報まで抜いてくれるのかな。
WOのEOModelerを参考にしてるようだからやってくれそうだけれど。。

HibernateのFAQでなぜGUIツールが付いてないのか?の問いに対して、
「GUIなどの補助ツールが必要なフレームワークってのは、
単体で使えないほど設計がタコいんだよ」
みたいな解答があったような気がする。
そりゃあそうだけど、やっぱ楽したいよ。

ってなもんで、jFaceDbcで基本情報抜いて、マッピングファイルの細かいところは
手作業でシコシコってパターンが一番多い。。。
>>912
俺は一日試しただけだけどリレーション情報抜いてくれるよ。
ただしインサート時の主キー生成の方法とかが何かと問題に
なるのは事実。

カスタマイズは一応できるようになってるけどまあ大体は
DBMS依存だしね。Oracleでは主キーを自動生成したいばあいは
シークエンスを使うのが一般的だけど……ってなあたりから
想像はつくでしょ。
主キー生成をGenericな実装にしようとするとSPと行ロックは
最低限欲しくなるけどこれまたDBMS依存の世界だからねー。
>>909
すげー、懐かしい名前だw
NASは今はどうなってるの?
>>908
Hibernate デュアルレイヤ・キャッシュ・アーキテクチャ
http://www.hibernate.org/4.html#A43
MappingFrameWorkって、いわゆるEJBとは違うんですか?
いわゆるEJBはMappingFrameworkのひとつ。
違うだろ。フレームワークと技術を比べるなよ。
フレームワークと技術の違いを述べよ (400字以内)
EJB は HYBERNATE や Torque と志向は同じでより大規模向けのもんと解釈してよいんでしょうか。
EJBの場合、MappingFrameworkはベースになる機能のひとつにすぎないから志向が同じとは言いがたい。
>>919
述べられないが、おれも>>918がただしいと思う。
EJBは、ビジネスコンポーネントを作るためのフレームワーク。(だったはず・・・)
ポータビリティーを指向してる点がちと違うのでは。(ポータビリティーなんて嘘だけど)
ORマッピングは、RDBのテーブルへアクセスする方法をOOっぽくするもの。

誕生したときの狙いはこれぐらい違うはずだけど、使い方次第では
同じにもなる。って感じかな?
EJBの実装はひとつのフレームワークだと思うんだが
分散オブジェクトを取り扱うための実装とビジネスオブジェクトの実装方法を提供してるんだし
そもそも、フレームワークって言葉の定義が、
いまや曖昧だよな。
もともと曖昧だよ。
分類のための言葉なんて、そんなもんだ。
かならず境界部分はあいまいになる。
>>919
技術 ⊃ フレームワーク
イギリス人とベッカムの違いを述べよ、っていうのと同じ無意味な質問だ。
SQL Maps なんかよさそ。チュートリアル読んだだけだけど、こんなのが欲しかった。

ttp://www.ibatis.com/common/sqlmaps2.html
フレームワークとは制御の反転だ、"Don't call me. I call you"だという単純化をすれば
EJBもフレームワーク。
これはフレームワークとライブラリの差のはなしか。
「もう、かけて来ないで。」
「……つぎは私からかけるから。」
>>930
お互いにかけあえる仲
ということは両方男ですね
Hollywood principle:
Don't call us, we'll call you.
俺用hibernateメモ。

hibernate.cfg.xmlは、SessionFactoryがbuildされる毎に読まれる。
hibernate.propertiesは、Hibernateのイニシャライズ時に1回だけ読まれる。
俺用hibernateメモ。

xbm.xmlは、作るのが死ぬほどめんどくさい。
>>934
*.hbm.xmlのこと?
Eclipse用のjFaceDbcプラグイン使うといいよ。
DBに接続して、hbm.xmlファイルにしたいテーブルを選択して、
Hibernateへ出力する命令を実行すると、基本的なマッピングファイルが
自動で作られるよ。
あとは、many-to-manyとかのリレーション情報とかが必要なら、そこから
手作業で修正とかすりゃいいし。

その点CayenneはCayenneModelerがあるから(゚д゚)ウマーだな。
でもCayenneは日本語情報が少なすぎ・・・
いいサイトある?
Cayenneってなんて読むの?
カイーネ?
939初期不良:04/05/11 06:39
検索するとすぐ引っかかるポルシェの cayenne は
カイエン、と書いてるね
amazonで検索すると、トウガラシを使った健康料理レシピ見たいのがひっかかる罠。
カイエンヌ
マスコットが、カイエンペッパーだよね。
オレンジ色のにくい奴。
943934:04/05/11 22:48
>>935
さんきゅ。

でも >928 を使った方が簡単そうな気がする。
dbutilsとはどちがうの
945934:04/05/12 22:17
>>944
dbutilはselectだけじゃないの?
>>945
すこしは調べてから書けよ。無知。
DBUtilsは結局SQLを書くことに変わりは無い。
本当に薄いラッパーなので、ResultSet取り出しが若干オブジェクティブになる程度。
その分速度は速いらしいが、DBUtilsの恩恵を受けるためにはQueryRunnerを使いまわしたり
色々面倒だしコード書き直しも沢山あるんで、俺は結局使わない事にした。

あと、無名クラスをガンガン書きまくるハメになるのでは読み辛くて嫌だ。
> あと、無名クラスをガンガン書きまくるハメになるのでは読み辛くて嫌だ。
RowProcessor書けばいいじゃん
すんげえ低レベルな話題だが、行ロックが欲しいようなケースってどう
してる?
いわゆるSELECT FOR UPDATEを使いたくなるようなケース。
参照→更新処理って実は大体こうだと思うんだけど。

JDBC2.0では更新可能なカーソルやカーソル名の取得が定義されちょるけど
ドライバによっては対応してないし、マッピングフレームワークとも
なると、正直不透明過ぎてわけわからん。
そもそも思いっ切りDBMS依存だけどデータ一貫性保証のためには絶対に必要、
という困り者。SPにできるんならSPで実装してしまうのが正しいのかな。
これもDBMS依存だけど。

それと、よく困るのは一意制約違反のエラー。これはシステムエラーでも
何でもないから、ちゃんとひろってアプリレベルでの対応が必要に
なるんだけど、SQLExceptionから一意制約違反であることを確かめる
には、DBMS毎のエラーメッセージのパースが必要になる。
Web+DBばっかりなんで、参照でロックしたことが無いなー。
いつもは最終更新時間か、レコード更新回数をフィールドに持たせてる。
>>950
ようするに、
参照(1)→ユーザがブラウザ側で手入力→更新(2)
で、(1)と(2)の間には無限大になり得るタイムラグがあるから、
その間のロックなんかできませんぜ、ということですよね。

無論その通りで、それゆえに(2)の時に再参照を行って、衝突があったかどうか
確認してるんだろうけど、その際の再参照→更新は
行ロックすべき、ですよね?
そこをatomicにできないんなら、論理的にはその間に衝突が発生する
可能性がある訳だから。
俺用hibernateメモ。

データベースアクセスは JDBC でしこしこが一番。
俺用hibernateメモ。

Criteriaクラスを使うよりも、HQL使ったほうが高速。
でも気持ち的にはCriteria使いたい。
>>944
selectの時に自動的にBeanに放り込んでくれる点はDBUtilと一緒だけど、
SQLMapsならinsert/update/deleteもBeanで自然に操作できる。
Hibernateって自動インクルメントのカラムを作らないと
SaveOrUpdateとかカスケードした更新とかって出来ないの?

Hibernateのためにテーブル設計するのもなって思うんだが
漏れは何か勘違いしてるだけかな。
>>955
Hibernateを利用したアプリに必要なテーブルを、XDoclet使って作ることもできるし、
既存テーブルをオブジェクトにマッピングさせてもいいし、どちらでも好きな方法とればいいじゃん。
マッピングの基本を見直してみるのもいいかも。
ttp://www.ozacc.com/library/java/hibernate/doc/html/or-mapping.html
Exadel - ORM Studio Hibernate Edition
ttp://www.exadel.com/products_ORMstudio.htm

私たちのユニークかつビジュアルな「ドラッグ&コネクト」アプローチで
Eclipseの実力を拡張する Exadel ORM Studio (Hibernate Edition)は、
HibernateのORMマッピングを用いて、あなたのアプリケーションに
より効率的な企業データベースアクセスをもたらします。

----

評価版あり。
958955:04/05/22 08:38
>>956
主キーが文字列型の場合ってgenerator classはassignedしか
使えないって思ってるんだけど、そもそもその考えが間違ってるのかな。
それかIdentifierGeneratorを実装するか。
その前に主キーが文字列型って時点で痛すぎか?・・・
>>955
uuidを使うとかは?