- - PR -
Torqueで実現できるSQLについて
1
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-11-07 14:15
みなさん、こんにちは。POTETOです。
Torqueをプロジェクトで利用している方々に、 実現できるSQLについて助言をいただきたいと思います。 @JOINを実現するには、DB定義XMLに外部キーの設定を必ず使用して、 自動生成されるメソッドを使わないと実現できない? A外部結合(LEFT/RIGHT JOIN)は実現できない? B集合関数(SUM/MAX/MIN...)は実現できない? @Aはhttp://www.mail-archive.com/torque-user%40db.apache.orgなどでも 話題になっていましたが、結局外部キーを設定してそれを使うという結果が 出たのか出ないのかわからないままスレが終了していました。 Bは1レコードを1オブジェクトとして扱うTorqueの性質上実現は難しいのでしょか? BasePeerクラスのexecuteQuery()を使うとSQLを直接実行できるようですが、 SQL文をなるべくコーディングさせずに実現する方法はないでしょうか? Torqueを使う上で基本的な質問で申し訳ありませんが、 宜しくお願い致します。 | ||||||||
|
投稿日時: 2003-11-07 14:39
POTETOさん。こんにちわ。Torqueネタで勉強させてもらっているさやべえです。
全然、回答になっていないのですが、私の場合、明らかにパフォーマンスが 悪くならない限り、適当にごちゃごちゃ記述して、ガシガシコーディング しています。(すごい日本語ですいません) そして、torque.logに実際にどのように発行されているか見ることができるので ある程度コーディングが落ち着いてテスト段階に入ってから、そのへんの チューニングを行っております。最悪、com.workingdogs.village.Recordを 使えばよいかと、これも楽観的に考えております。 Torqueに関するTips/ノウハウをまとめらればよいのですが・・時間が 私の考えでいけば、@〜B全部どうにかしてやっちゃっています。 本当にSQLのことを考えるのであれば、アプリケーションティア側の技術 であるTorque(語弊??)でいろいろ考えるより、データベースティア側 の技術であるPL/SQLやPL/pgSQLでの実装を考えるのが妥当なのかと、私は 思っています。 | ||||||||
|
投稿日時: 2003-11-07 15:24
こんにちは。
Torqueをプロジェクトでは利用してないですが、 薄れかけた記憶をもとにコメントを。 1. (1)Criteria#addJoinを使う方法 ・一度に1つのテーブルの項目しか取得できない。 (2)BasePeer#executeQueryあるいはJDBC APIを利用する。 ・自分でマッピングすることになる。 (3)doSelectJoin〜を利用する ・自動生成されるdoSelectJoinXXXメソッドには引数に java.sql.Connectionオブジェクトがないため、 そのまま使おうとすると、トランザクション管理の点で アプリケーションによっては問題があるかも。 2.Torqueではサポートしていないと思います。 私は1(2)の方法で実現しました。 3.
おっしゃるとおりだと思います。 [追記] というよりも、OMクラスのどのフィールドにマッピングしたらよいか Torqueがわからないということだと思います。 以前遊びで使ってみた感想ですが、 簡単なデータベース操作(マスターメンテナンスなど)をしている間は SQLを書かずに済むのでTorqueはなんて偉大なツールなんだと思いますが、 実際のシステムでは、non-SQLですべて済むかと言えば そうはいかないでしょう。 私は次のようなケースでSQLを記述する必要がある(あるいは、べき)と 認識しています。 ・TorqueがサポートしていないSQL(Outer Join, ベンダー独自のSQL) ・集合関数(SUM/MAX/MIN...)のようにそのままでは オブジェクトにマッピングできないSQL ・検索条件、副問い合わせなどが複雑なSQL ※Criteriaを駆使すれば実現できるのでしょうが、 開発速度、品質の確保、メンテナンス性を考えると、 SQLを記述するのが現実的だと思います。 ある程度妥協(?)が必要のように思います。 以上です。 [ メッセージ編集済み 編集者: とまと 編集日時 2003-11-07 15:43 ] | ||||||||
|
投稿日時: 2003-11-09 02:44
こんにちは。
あと、Outer Joinなどに対してはViewを作成し、 TorqueでそのViewに対するOMクラスを作成する といったTipsもあるようですね。 ※でもなんかTorqueに振り回されていて、 業務ロジックに集中できず、 逆に開発効率を下げているのでは? と思うのは私だけでしょうか。 | ||||||||
|
投稿日時: 2003-11-09 18:45
便乗質問をさせて頂きます。
C和(UNION/UNION ALL)は実現できない? 開発者メーリングリストに同様の質問が投稿されているようですが、回答がないようです。 http://www.mail-archive.com/turbine-torque-dev@jakarta.apache.org/msg02140.html よろしくお願いします。 | ||||||||
|
投稿日時: 2003-11-11 03:15
さやべえさん、とまとさん、返信ありがとうございます。POTETOです。
結局SQLをガリガリ記述する必要はありそうですね。 とまとさんのおっしゃる通りOUTER JOINなどはVIEWで 対応するというのは手ですね。 SQLServerを利用しており"SELECT XXX WITH (UPDLOCK)"の 実現などが必要な為、SQLを組み立ててBasePeer#executeQueryで実行して、 ValueObjectクラスを作成してMAPするんだろうなー。と思っています。 (戻り値のListのエレメントオブジェクトがRecord型ってのが 最初わからずあせりましたが。 電気ひつじさんへ、 UNION (ALL)も同じで、TorqueがMAP先のOMクラスがわからないのでは ないでしょうか? 「UNION」とかって久しく使って無いので新鮮でした。 O-Rマッピング技術って使いこなすの難しいですね。 (UPDATE/INSERT/DELETEはすごく使いやすいですけど。) とまとさんのおっしゃる通り、Torqueに振り回されぎみです。 いい勉強になりました。 | ||||||||
1
