- PR -

Torqueで実現できるSQLについて

1
投稿者投稿内容
POTETO
常連さん
会議室デビュー日: 2003/10/06
投稿数: 41
投稿日時: 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/03/13
投稿数: 33
投稿日時: 2003-11-07 14:39
POTETOさん。こんにちわ。Torqueネタで勉強させてもらっているさやべえです。

全然、回答になっていないのですが、私の場合、明らかにパフォーマンスが
悪くならない限り、適当にごちゃごちゃ記述して、ガシガシコーディング
しています。(すごい日本語ですいません)

そして、torque.logに実際にどのように発行されているか見ることができるので
ある程度コーディングが落ち着いてテスト段階に入ってから、そのへんの
チューニングを行っております。最悪、com.workingdogs.village.Recordを
使えばよいかと、これも楽観的に考えております。

Torqueに関するTips/ノウハウをまとめらればよいのですが・・時間が

私の考えでいけば、@〜B全部どうにかしてやっちゃっています。

本当にSQLのことを考えるのであれば、アプリケーションティア側の技術
であるTorque(語弊??)でいろいろ考えるより、データベースティア側
の技術であるPL/SQLやPL/pgSQLでの実装を考えるのが妥当なのかと、私は
思っています。
とまと
ベテラン
会議室デビュー日: 2003/10/18
投稿数: 51
投稿日時: 2003-11-07 15:24
こんにちは。

引用:

POTETOさんの書き込み (2003-11-07 14:15) より:
@JOINを実現するには、DB定義XMLに外部キーの設定を必ず使用して、
 自動生成されるメソッドを使わないと実現できない?
A外部結合(LEFT/RIGHT JOIN)は実現できない?
B集合関数(SUM/MAX/MIN...)は実現できない?



Torqueをプロジェクトでは利用してないですが、
薄れかけた記憶をもとにコメントを。

1.
(1)Criteria#addJoinを使う方法
・一度に1つのテーブルの項目しか取得できない。

(2)BasePeer#executeQueryあるいはJDBC APIを利用する。
・自分でマッピングすることになる。

(3)doSelectJoin〜を利用する
・自動生成されるdoSelectJoinXXXメソッドには引数に
 java.sql.Connectionオブジェクトがないため、
 そのまま使おうとすると、トランザクション管理の点で
 アプリケーションによっては問題があるかも。

2.Torqueではサポートしていないと思います。
私は1(2)の方法で実現しました。

3.
引用:

Bは1レコードを1オブジェクトとして扱うTorqueの性質上実現は難しいのでしょか?


おっしゃるとおりだと思います。
[追記]
というよりも、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/10/18
投稿数: 51
投稿日時: 2003-11-09 02:44
こんにちは。

あと、Outer Joinなどに対してはViewを作成し、
TorqueでそのViewに対するOMクラスを作成する
といったTipsもあるようですね。

※でもなんかTorqueに振り回されていて、
業務ロジックに集中できず、
逆に開発効率を下げているのでは?
と思うのは私だけでしょうか。
電気ひつじ
会議室デビュー日: 2003/01/15
投稿数: 8
投稿日時: 2003-11-09 18:45
便乗質問をさせて頂きます。

引用:

@JOINを実現するには、DB定義XMLに外部キーの設定を必ず使用して、
 自動生成されるメソッドを使わないと実現できない?
A外部結合(LEFT/RIGHT JOIN)は実現できない?
B集合関数(SUM/MAX/MIN...)は実現できない?


C和(UNION/UNION ALL)は実現できない?

開発者メーリングリストに同様の質問が投稿されているようですが、回答がないようです。
http://www.mail-archive.com/turbine-torque-dev@jakarta.apache.org/msg02140.html
よろしくお願いします。
POTETO
常連さん
会議室デビュー日: 2003/10/06
投稿数: 41
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)