Java⇔RDBのMapping-F ..
[2ch|▼Menu]
175:デフォルトの名無しさん
06/04/27 03:23:22
>>172
1行目はそうだと思う。
2行目は微妙。たとえば売り上げオブジェクトの「未回収」メソッドを呼んだら
赤伝オブジェクトが生成されて、台帳オブジェクトに追加されるとしたら、
これは立派なビジネスロジックなわけだが、この処理を書くところはあくまで
「売上」オブジェクトであるべきだよな。
だって「未回収」メソッド呼んだら裏でごにょごにょやる内容が赤伝生成だったり
台帳更新だったりするわけで。

仮に台帳更新をしたらどっかの担当者にメールを送らないといけないとしても、
台帳の更新メソッドが呼ばれたら、メーラーオブジェクトの送信メソッド呼ぶように
してりゃいいわけで、結局外からみれば、売上の「未回収」を呼ぶだけで台帳に
赤伝が入って担当者にメールが飛ぶ、というビジネスロジックが実行される。

だったらロジック実行には売上オブジェクトだけあればOKだよな?
こんな感じで結構な数のビジネスロックはドメインモデル内で実行可能だと思う。

でも処理実行後に、たとえば現在の赤伝数とか、赤伝発行後の売上高だとか
を取得して画面に返さないといけないとしたら、これはあくまでウェブアプリ
ケーションの都合で実行するんであって、ビジネスロジックとは関係ない。
でも同じトランザクション内で赤伝数のカウントしたり、売上高計算したり
しないといけなかったりもする。
となると、サービスとして一つのトランザクション境界としてまとめるのが
一番やりやすいかなあ、と思うな。

まあでもぶっちゃけて言うと、Springとか使うとメソッド呼び出しと応答までを
トランザクション境界にする機能があって便利なんで、それを利用するためだ
けにサービス用意して、サービスを呼び出したら即モデルのメソッド一つ呼んで
終わり、なんてこともある。だってプログラム的にトランザクション制御する必要な
くて楽だからさあ。

176:デフォルトの名無しさん
06/04/27 06:41:15
O/Rマッピング使っていると、エンティティに情報があるんだから
ドメインモデルとしてロジックを書きたくなるんだけど
現在のDIコンテナは、ステートレスなトランザクションスクリプトを扱う方が便利だから
そこにちょっとしたズレを感じたりしている
エンティティにストラテジーをDI出来たりするO/Rマッピングツールが出たら便利そうなんだが

177:デフォルトの名無しさん
06/04/27 09:26:32
Hibernateの遅延ロードで質問
遅延ロードのときのSet型の中身を並べ替えすることは、mappingの定義(order-byアトリビュート)
でできるけど(実際、many側のデータを使った並べ替えはできた)、many側にひもづく別のクラスの
データを使って並べ替える事は可能?

A:B:C  −> A:B=1:n B:C=n:1

Cの「並び順」フィールドの値でBを並べたい、みたいな感じ

178:デフォルトの名無しさん
06/04/28 14:22:22
>>168
すんません。
参考サイトとか教えていただけないでしょうか?

179:デフォルトの名無しさん
06/04/29 06:17:05
>>178
URLリンク(www.hibernate.org)

そういや、リファレンスの日本語版はいつまで経っても2.1.6のままだな

180:デフォルトの名無しさん
06/04/29 10:31:44
>>179
つ「言いだしっぺ必敗の法則」

ということで翻訳よろしくww

181:デフォルトの名無しさん
06/04/30 03:38:19
>>180
つ「言いだしっぺ必敗の法則」

それやると誰も何も言いださんくなるよ。
おれの前の会社がそーだったよ。

182:デフォルトの名無しさん
06/04/30 06:43:25
もともとNetNews(それもfj)とかの世界で人を黙らせるための
ものだからな>言いだしっぺ

あれはある意味2chの対極にある世界だった。

183:デフォルトの名無しさん
06/05/01 00:51:28
>>181-182
つか、冗談だからw ちゃんと"ww"つけてるじゃん。

というか、前の翻訳は誰がやったんだ?

184:デフォルトの名無しさん
06/05/01 01:12:56
最近 2ch のせいで「www」とかいうアドレスをみると
笑えてくる。

185:デフォルトの名無しさん
06/05/01 15:15:45
>>184
人生楽しそうですね。

186:デフォルトの名無しさん
06/05/02 19:19:08
OpenJPA記念カキコ
URLリンク(incubator.apache.org)

187:デフォルトの名無しさん
06/05/02 23:31:28
すいません、.NETで申し訳ないんですが、質問させて下さい。
.NETでORMに詳しい人が集まってそうなスレが見当たらなかったもので・・・。

NHibernate Best Practices with ASP.NET, Generics, and Unit Tests
URLリンク(www.codeproject.com)

上のサイトのサンプルに、NHibernateでのOpenSessionInViewパターンの実装例があるのですが、
リクエスト開始時にbeginTransaction、リクエスト終了時にcommitTransactionとsessionCloseを行っています。
この作りだと、もしリクエスト中に例外が発生した場合、Transactionはどうなるのでしょうか?

JavaのFilterと全く同じ仕組みが無いのでこうしてるのかとは思うのですが、これで問題が無いのかどうかがイマイチわかりません。

一応、Session管理クラスの中を見ると、commit時に例外キャッチしたらrollbackするようにはなっているんですが、
Transaction中に例外が起きた場合にcommitが成功してしまうケースってありえないんでしょうか?
それともTransaction中に例外が発生した場合には、必ずcommitで例外が送出される仕組みなんでしょうか?

188:デフォルトの名無しさん
06/05/03 23:31:55
jarファイルの中のdaoからHibernateを利用しようと考えてるんだけど
マッピングxmlやhibernate.cfg.xmlって普通どこに配置するのがメジャー?

189:デフォルトの名無しさん
06/05/13 10:40:38
ibatisって、jspみたいに自作のタグを使用できないのでしょうか?

190:デフォルトの名無しさん
06/05/13 12:20:53
普通にjspのカスタムタグを使えばいいんじゃないでしょうか....

191:JAVA初心者
06/05/13 23:44:13
こんにちは。いつもいろいろ教えてくださいましてありがとうございます。
今日はTORQUEに関する質問です。
TORQUEについて、まだ使用経験がないのですが、今度使わなくてはいけなくなりました。。。。
でも、なにせ資料が少ないので。。。。
DBの中でプライマリーキー(ここではID)の一番大きい数をしるのは
そうやってやればいいでしょうか?
たとえば、IDが今は10番まで使われていたとして、その10番というのを
知る方法が知りたいのです。SQLだと、SELECT MAXみたいなので
GETできると思いますが。。。。。
よろしくお願いしますm__m


192:191
06/05/13 23:52:50
書き忘れました。
ここから誘導されてきました。

【初心者】Java質問・相談スレッド85【大歓迎】
スレリンク(tech板)l50

193:デフォルトの名無しさん
06/05/15 17:44:33
>>190
すいません。ちがいます。
sqlのxmlファイルに、ibatis用の拡張タグを使用できる仕組みになっているかを確認したかったです。

194:デフォルトの名無しさん
06/05/16 09:57:01
>>193

<!DOCTYPE sqlMap
PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"URLリンク(www.ibatis.com)">

195:194
06/05/16 10:07:24
連投スマソ

SqlMapClientBuilder#buildSqlMapClientに
velocityを喰わせることは出来るかもね。

やったことないケド

196:デフォルトの名無しさん
06/05/17 00:40:11
いつも参考にさせていただいてます。

現在Javaで作成している基幹系アプリケーションで、ランタイム上で
テーブルの作成・修正・削除を行う必要があります。
この場合、O/R Mapping Frameworkは向かないでしょうか?

今のところ、JavassistなどでAnnotation付きのクラスファイルを生成して、
それをHibernateのConfigurationに動的に読み込ませれば良いのでは?
と考えていますが、まだ実現に至らずです。

どなたかノウハウをお持ちでしたら、ぜひ教えてくださいm(_ _)m

197:デフォルトの名無しさん
06/05/17 00:45:43
>>196
URLリンク(www.fk.urban.ne.jp)

198:デフォルトの名無しさん
06/05/17 09:45:07
>>196
> ランタイム上でテーブルの作成・修正・削除

ていうか何そのキチガイ設計。
キチガイが作ったのを引き継がされたの?

199:196
06/05/17 22:48:44
お二方、回答ありがとうございます。

>>197さん
提示していただいたリンク先の方法を確認しました。
生成したクラスコードからテーブルを自動的に生成する
必要があります。
そのため、この方法は利用できないと判断しました。

>>198さん
キチガイですいません orz
まだまだ勉強が足りないと痛感してます。

200:196
06/05/17 22:49:27
196です。

今回の案件では、ユーザが自由に編集できるクラスと
そのオブジェクトを永続化してRDBに登録するアプリケーションを
作成します。

クラス自体の生成、修正(継承先の変更等)、削除だけでなく、
クラスのフィールドの追加、修正、削除もサポートする必要が
あります。
クラスの編集によって、オブジェクトを格納するテーブルも
修正しなければいけないため、アプリケーション上で動的に
テーブルを操作する方法を質問しました。

できるだけO/Rマッピングツールを使うように言われていますが、
今回の目的だと、素直に動的にSQLを生成して操作した方が
良いような気がしており、エキスパートの方々のご意見を伺おうと
思いました。

個人的には、今回の案件だと、RDBMSの種類やバージョンに
よる方言を吸収して、コネクションプーリングなどを提供する
ツールなら何でもいいような気もしますが、中小の下請けなので
強く言い出せません orz

乱文長文失礼しました。

201:デフォルトの名無しさん
06/05/17 23:19:26
ユーザがクラスを動的に生成・変更できるってことは
バイトコード操作使いまくりか…
正直Javaでやるのが間違ってると思われ。いまからLispハッカー
探せ。奴らは毎日そういうことやってる。

202:デフォルトの名無しさん
06/05/17 23:20:31
((((((((((((;゚Д゚))))))))))))リスリスプルプル

203:デフォルトの名無しさん
06/05/17 23:29:43
>>199
データベースさえcreate文で作ってしまえばいいんじゃねぇの?
そしたらあとはマッピングクラス生成してマッピングっていうのをやってくれて望みどおり

204:デフォルトの名無しさん
06/05/17 23:43:52
クラスをシリアライズしてvarchar2(4000)
くらいの列につっこむようにするとかは?

205:196
06/05/18 00:27:31
お騒がせしてます。196です。

>>201さん
すいません、>>200の説明で、大変な御幣がありました。

>今回の案件では、ユーザが自由に編集できるクラスと
>そのオブジェクトを永続化してRDBに登録するアプリケーションを
>作成します。

ここで言うクラスとオブジェクトはJavaのものではなく、OWLのものでした。
先方さんは、
OWLのクラス・インスタンス ⇔ Javaのクラス・インスタンス ⇔ DB
という処理を希望されています。
OWLだと、トリプルの構造をそのままテーブルに格納すれば良いと
思っていましたが、メインは検索処理でインスタンス数が多いそうで、
そのようなテーブルスキーマだと速度が出ないと判断しました。

206:196
06/05/18 00:37:18
連投すいません。196です。

>>203さん
DDLだけConnectionを直接取得してSQLで行うことも検討しています。
このとき、対応するマッピングクラスをConfigurationに設定した場合、
既にbuildされたSessionFactoryに変更を反映する方法が分かりませんorz
独自にFactoryの実装を行えば動作しそうな気もしますが・・・

>>204さん
BLOBにシリアライズしたクラスコードとオブジェクトを挿入することも考えました。
この場合、index用のデータをテーブルの別のフィールドに格納しておけば
検索速度も上がるのかなと思いますが、保守やシステムのアップグレードが
大変そうで躊躇しています。

相変わらず長文ですいませんorz
最近謝ってばかりだ…

207:デフォルトの名無しさん
06/05/18 00:49:24
OWL? Lispハッカー以上に気の狂った世界に踏み込んでるな。
漏れにはわからん世界だが、RDBMSの性能のことならわかる。

いまのPCの性能で、行数が多すぎて性能が出ないなんて
話は猛烈なレアケース。
いろいろごちゃごちゃ理由がつくんだろうが、RDBMSはごちゃごちゃ機能を
つけてて、必ず対策があるようにできてる。RDBMSのマニュアル調べてみろ。

208:196
06/05/18 01:15:01
>>207さん

OWLのクラス階層の編集を可能とするため、上位クラスの変更を下位クラスにも
反映させる必要があります。
また、個々のクラスのインスタンス数は大したことはないですが、想定している
インスタンス数が全体で100万のオーダーであるため、それを一つのテーブルで
OWLのトリプル単位でばらして格納するよりは、クラス単位でテーブルを生成して
そこに持たせた方が良いのでは、と考えました。
(複雑なデータ型の問題ももちろんあります)

O/R Mapping Toolを使わずに、自前で作成した方が良いのかもしれません。
とりあえず、仕様を含めて、RDBMSをもう一度勉強しなおしてきます。
ご指摘ありがとうございました。

あぁ、今夜もクラス階層を構築している夢を見そう orz

209:デフォルトの名無しさん
06/05/18 01:21:21
ところでOWLってなに?
腹がよじれた失意体前屈?

210:デフォルトの名無しさん
06/05/18 01:56:02
Javaのインスタンスを生成する必要がわからん……

211:デフォルトの名無しさん
06/05/18 10:39:25
>>205
>OWLのものでした。

BC++のObjectWindows Libraryかと思った

212:デフォルトの名無しさん
06/05/18 13:05:54
>>194
本当にすいません。
タグはタグでも、<select>内に書ける<equal>などのタグです。

213:デフォルトの名無しさん
06/05/18 13:21:17
>>209
巨乳巨腹のorzです。

214:デフォルトの名無しさん
06/05/18 14:03:33
スキーマの緩いXML-DBを使った方がよかったりして。

215:196
06/05/18 22:14:30
>>210さん
OWLのクラスをJavaのクラスに、OWLのプロパティをJavaのクラスのフィールドに
見立てようと思っていました。
そうすると、OWLのインスタンスはJavaのフィールド値の集合で表せるかな、と。

>>211さん
OWLはWeb Ontology Languageの方です。
不注意で誤解を与えて申し訳ない。

>>214さん
今回は検索系がメインらしいので、XML-DBだと速度面が不安です。

先方さんの話をよく聞くと、各RDBMSのSQLの方言を吸収できて、かつノウハウが
多く得られるようなミドルウェアなら何でも良さそうです。
何かの記事で読んだC-JDBCとか気になりますが、スレ違いなのでやめておきます。

皆様、お付き合いいただきありがとうございました。

216:デフォルトの名無しさん
06/05/18 22:22:06
>>215
OWLってのの具体的な事は全くわからんが、
最初の3行が間違ってる気がするな。

217:デフォルトの名無しさん
06/05/18 23:33:54
性能要求が厳しいのにRDBMS依存を避けろ、か…
キチガイの相手は大変だな。
おそらく全部ぐだぐだになって成果物ゼロで終わると思うが、
金はしっかり取れよ。

218:196
06/05/19 00:29:06
196です。また来てしまい、すみません orz

>>216さん
OWLのクラスとプロパティのそれぞれに、独自のAnnotationをつける仕様なので、
 (1)OWLのクラスのAnnotation用テーブル
 (2)OWLのプロパティのAnnotation用テーブル
 (3)OWLのクラスとOWLのプロパティの対応情報テーブル
 (4)各クラスのインスタンス用テーブル(カラム名は各プロパティ名)
の4種類のテーブルを作成するように設計しました。
大学出立てで経験が浅いので、どの辺がマズいかはわかりませんorz

>>217さん
汎用性と性能は両立しないのは分かっていますので、そこそこのものを提供しようと
思っています。

情報収集の最中に発見したのですが、Seasarファウンデーション傘下のTuigwaaが
Hibernate使用&DDLサポートとなっていました。
ダイコン?とかよく分からないですが、参考になるかもしれないので今週末の休みに
ソースを読んでみようと思います。

219:デフォルトの名無しさん
06/05/19 00:36:42
>>218
>OWLってのの具体的な事は全くわからんが

おまえ日本語読める?

220:デフォルトの名無しさん
06/05/19 00:53:12
>>219
顧客がイカレてるせいで、こいつもおかしくなってるんだろう。
金だけはしっかり取れよ。

221:デフォルトの名無しさん
06/05/19 01:15:22
>>159
ヒルベルト変換、ヒルベルト包絡線を思い出した

222:デフォルトの名無しさん
06/05/19 01:44:03
何が悪いとはっきり言うつもりはないが、もうちょっとまともに検討しないと大火災になるぞ、そのプロジェクト。


223:デフォルトの名無しさん
06/05/19 01:51:03
もうなってるようにしか見えないっす

224:デフォルトの名無しさん
06/05/19 02:19:36
LDAPとかのがまだマシなような。

225:デフォルトの名無しさん
06/05/19 10:31:23
何から何まで不毛な要件で、かつゴールもなんら魅力が無いと来た。
世の中色んな案件あるんだね。

226:デフォルトの名無しさん
06/05/19 14:11:21
dbutils結構いいかも。

227:デフォルトの名無しさん
06/05/19 14:56:26
Mapに詰め込むだけでもMappingといやーMappingだが

228:デフォルトの名無しさん
06/05/19 22:42:45
Beanに詰めることも出来るよ。一応。

229:デフォルトの名無しさん
06/05/19 23:15:35
ちんこがBeanBeanでつ

230:デフォルトの名無しさん
06/05/19 23:51:15
   〃∩ ∧_∧
   ⊂⌒(  ・ω・)  はいはいわろすわろす
     `ヽ_っ⌒/⌒c     
        ⌒ ⌒


231:デフォルトの名無しさん
06/05/27 13:38:21
Cayenneで部分読みしたいんですがどうすればわかりません。
サンプルが落ちているところをご存知の方いませんか?

232:デフォルトの名無しさん
06/05/27 19:56:18
>>231
SelectQueryのsetPageSize()じゃ用途に合わないのかな?
Cayenneのページにサンプルがあるよ。

URLリンク(www.objectstyle.org)

233:231
06/05/29 11:43:03
>>232
サンクス
見てみます。

234:デフォルトの名無しさん
06/05/31 14:58:57
参照系だけの場合、HibernateとJDBC直書きとどっちがパフォーマンスいいですか?
キャッシュの設定によってはHibernateのが早かったりする?

235:デフォルトの名無しさん
06/05/31 19:46:51
ストアド化しろ

236:デフォルトの名無しさん
06/05/31 22:47:03
つうか素でHibernateのほうが速いだろ。

237:デフォルトの名無しさん
06/06/01 01:50:11
それはほとんどない。

238:デフォルトの名無しさん
06/06/01 22:10:42
どういう設定をしたら参照がJDBCより遅くなるのかと。あらゆる局面で
lazyオフでキャッシュなしか?

239:デフォルトの名無しさん
06/06/01 22:27:56
>>238
いくつかは考えられるだろ。
・最初の一回目の検索の場合(Hibernateが該当するオブジェクトをまだロードしていない状態)
・ストアドプロシージャを呼び出す場合(Javaアプリ側でなんとかするより、ストアド使った方が速い場合が多い)

240:234
06/06/03 00:48:56
みなさんレスありがとうございます。

ちなみに、バッチ処理で1回のみですがテーブル全件舐めたりします。
1回きりの場合だとHibernate導入するメリット無さそうですね・・・(パフォーマンス面で)。

ストアドである程度書いてJDBCで呼ぶってのが理想的みたいですが、ストアドで作るとメンテできん!って怒られます。
バッチでストアド無しでパフォーマンス高くする手ってなんかないですかね〜・・・。

241:デフォルトの名無しさん
06/06/03 11:17:37
バッチ処理でHibernateを利用する理由はほとんど無いな。


242:デフォルトの名無しさん
06/06/03 15:39:34
O/R-Mappingでやってることって、結局

・バックグラウンドでSQLを作って投げる
・返ってきたresultsetをbeanに自動的にマッピングしてcollectionに詰めて返す

が本質だよね?
そう考えると、DbUtilとかでも十分なのかな。。。
うちの会社、こういう新しい?技術とかの導入に消極的だし、
新しい知識を積極的に勉強しようっていう技術者も少ない。。。

個人的にはiBATISあたりがよさげなんですが、使ってる人いますか?

243:デフォルトの名無しさん
06/06/03 16:15:01
キャッシュとか遅延ロードが主なメリットじゃない?

244:デフォルトの名無しさん
06/06/03 16:38:13
関連テーブルの紐付けが嬉しい。

245:デフォルトの名無しさん
06/06/03 16:46:05
今一これの利点が分からないんだけど
いちいちXMLとかに定義しないと使えないわけ?
extends MySQLObjectとかしてささっとプロパティだけで完結して欲しい。

246:デフォルトの名無しさん
06/06/03 17:12:28
>>242
関連テーブルを自動的に取ってきてくれるという重要な機能が
あるでしょ(これはDbUtilにはない)。

247:デフォルトの名無しさん
06/06/03 17:15:40
>>245
つ 無定義Hibernate
URLリンク(www.fk.urban.ne.jp)

俺の場合はCayenneを使ってDBのDDL作成とマッピング定義作成を
Cayenne Modelerで同時にやっちゃうので、ORマッパーを使ったからと
いってそんなに負荷は変わらない感じ。

248:デフォルトの名無しさん
06/06/03 17:25:55
最近はどこのO/Rマッパーもテーブルからのクラス自動生成機能持ってる
JPA使えばXMLファイルはもういらない

249:デフォルトの名無しさん
06/06/03 17:33:59
>>247
ふーん。いいね、組み込みDBとかで気軽に永続化できるようになると
ゲームとかも作りやすくなっていいかなぁ

250:デフォルトの名無しさん
06/06/03 19:05:00
>>245
MiddlegenでもXDocletでも、Hibernate Annotationでも、好きなの使え。

251:デフォルトの名無しさん
06/06/08 22:05:18
JPAの解説記事少ないなあ。
みんなxmlでしこしこやってるの?

252:デフォルトの名無しさん
06/06/08 23:30:24
>>240
いまPro EJB3を読んでるところだと思われ。
でもなんでそこでxmlが出てくるのかわからない。

253:デフォルトの名無しさん
06/06/09 10:14:29
>>251
Java Persistence APIってなんなの?

254:デフォルトの名無しさん
06/06/09 10:26:06
ORまっぱの仕様

255:デフォルトの名無しさん
06/06/09 11:20:29
>>254
jspタグライブラリでも使用できるらしいけど。
ってことは、jspでDBアクセス用ってことか・・・。不要じゃん

256:デフォルトの名無しさん
06/06/09 16:54:17
それはJPAを使うタグライブラリのこと
JPAの仕様とは関係ない
JPAは、HibernateやTopLinkを元にしたO/Rマッピングの標準仕様のこと

257:デフォルトの名無しさん
06/06/10 18:42:38
>>255
JSPタグライブラリにJDBCタグライブラリがあるが、JDBCはJSPでDBアクセス用か?

258:デフォルトの名無しさん
06/06/10 20:18:24
そう。

259:デフォルトの名無しさん
06/06/11 13:51:28
アホな流れになってるな。
子供か!!

260:デフォルトの名無しさん
06/06/11 16:52:36
そう。

261:デフォルトの名無しさん
06/06/13 22:09:47
Hibernate2xで関連テーブル使ってmany-to-manyでマッピングしてる時、bagとかのwhere属性で関連先のテーブルのカラムに対する条件って書けますか?
普通にカラム名と条件書くと関連テーブルにそんなカラムねーよ!!って怒られちゃうんですが・・・。

262:デフォルトの名無しさん
06/06/14 07:18:09
能動的にコーディングできるってだけで、O/Rマッパーはチューニングに向いてないんだな

263:デフォルトの名無しさん
06/06/14 09:18:08
少なくとも、困ったときに直にSQL書いて実行できるようなフレームワークじゃないと、
使えないなあというか使うの怖いなあ。
まあそのときだけJDBC使えって話はあるけど。


264:デフォルトの名無しさん
06/06/14 10:19:43
Hibernateは問題ないな。

265:デフォルトの名無しさん
06/06/14 10:26:34
>>263
ibatis

266:デフォルトの名無しさん
06/06/14 11:37:06
でも直に書けるフレームワークは、普段から直に書く様に成って、後で困る罠。

267:デフォルトの名無しさん
06/06/14 17:14:33
>>266
そういう開発者、いそうだね。特に新規に導入するとき、わからない→直書きってされそう

268:デフォルトの名無しさん
06/06/14 23:34:39
でもハマった時の最後の手段として、SQLとかJDBC APIとかとも上手く連携してくれるのがいいなぁ。
プログラマとしては逃げたくなくても、サラリーマンとしてそういう手段に逃げちゃう時が多々あるんで・・・・・・。

269:デフォルトの名無しさん
06/06/17 11:50:26
Hibernate3とEJB3、これから作るシステムに入れるならどっちがおすすめ?

270:デフォルトの名無しさん
06/06/17 11:51:43
今までどおりの使い分け

271:デフォルトの名無しさん
06/06/17 11:57:00
ゲームで使えそうなORMはHibernateくらいかい?組み込みたいのでオススメを聞きたい

272:デフォルトの名無しさん
06/06/17 14:51:30
>>269
EJB3を使ってJPAの実装としてHibernateを利用

273:デフォルトの名無しさん
06/06/17 14:52:33
>>271
つうか、これからはJPAという標準になるんだから、ゲームで使うくらいならTopLinkもHibernateも大差なかろう。

274:269
06/06/18 01:32:50
>>270
今までEJBって使った事ないんですが、使い分けってどんな基準ですか?

>>272
なるほどー。
使い分けってよりJPAの実装としてHibernateを選択って感じなんですね。

275:デフォルトの名無しさん
06/06/18 02:45:06
>>274
いままで使ってなかったのはEJB2
EJB3とは別物。
ORマッピング使うなら、EJB3で十分。
実質的にはHibernateの仕様がEJB3になったわけだから、EJB3とHibernateをどう使い分けるかということが、そもそもナンセンスということになる。

276:デフォルトの名無しさん
06/06/18 02:57:00
>>275
リモートで呼び出せるかどうかのみ違う。
使い分けはそこだけかな。

277:デフォルトの名無しさん
06/06/18 03:02:14
JPA仕様とそれぞれのORマッパーって結構違うんじゃない? Hibernateについては同感だけど。

たとえばCayenneもJPAをサポートするといって準備しているけど、Cayenneの
発想とJPA(Hibernate)のやり方(というか考え方)って結構違うように思う。特に
トランザクションを意識させない設計とか、どうすんだろ、と思う。

TopLink(Grassfishに組み込みのやつ)とかはどうなんだろうか。

278:275
06/06/18 03:47:22
>>277
HibernateもCriteriaとかProjectionとかがEJB3に取り入れられてなくて残念なんだけど、ORマッピングのプログラムインタフェースの部分だけを見ればJPA準拠ならHibernate互換ということになるんじゃないかな、と思ってます。

279:275
06/06/18 03:53:08
>>277
重箱の隅だけど、GlassFishね。草みたいな魚じゃなくて、ガラスみたいな魚。
TopLinkは、JPAの実装として使う限りでは、個性を感じない。
もちろん、どのJPA実装も、JPAの実装として使う限りでは個性を感じないというのは当たり前の話ではあるんだけど。

280:デフォルトの名無しさん
06/06/18 05:50:23
パフォーマンスの差とかあるのかな?

281:275
06/06/18 08:08:21
それぞれの固有の機能を使わない限りは、無視できるほどの違いしかないと思う。
でも実測値がほしかったら、実サーバーで確認するのんが確実

282:デフォルトの名無しさん
06/07/03 23:13:24
Hibernateが特許侵害だとよ。
URLリンク(japan.cnet.com)
>テキサス州の連邦地方裁判所に今週提出された訴状によると、
>原告のFireStar Softwareは、JBossのHibernate 3.0が同社の
>「オブジェクト指向ソフトウェアを用いた、リレーショナルデータベースの
>リンクに関する特許」を侵害していると主張しているという。

283:デフォルトの名無しさん
06/07/04 01:49:42
>>282
特許侵害しているとして訴えられただけだろう。
まだまだ一方的な主張の段階。
「特許侵害だとよ。」は風説の流布に当たるおそれがあるから注意。
断定は判決が出てからに汁。

よくあるアメリカ流のふっかけ・ゆすりと推測してみる。
うまく行けば和解金ふんだくれるもんな。


284:デフォルトの名無しさん
06/07/04 21:10:50
時給1000円でJava教えてくださるかたを募集します
場所 所沢(池袋・高田馬場から直通)

i−want−to−study−java@hotmail.co.jp
(アドレスは全角で書いてあるので半角に直してください)
よろしくおねがいします

285:デフォルトの名無しさん
06/07/04 23:56:57
>>281
すでに「おい、そのころには既にEOFがあったわけだが。
そのEOFにすら先行技術があるんだが?」と冷静なツッコミが
入っとるよ。

286:デフォルトの名無しさん
06/07/05 05:13:30
BerkeleyDB Java Editionつかってます

287:285
06/07/05 09:03:31
アンカーミスった。
>>282
だった。

288:デフォルトの名無しさん
06/07/10 22:01:42
SimpleORM
URLリンク(www.simpleorm.org)

whitepaperを眺めてみたらいい感じ。
クラスに定義したメタデータからテーブルを作ったりできるらしい。

新規開発にしか向かないかな?

289:デフォルトの名無しさん
06/07/17 21:22:59
教える対象は超初心者です。

専門学校などでJavaを勉強されていて夏休みだけ教えたいという方も歓迎です

290:284
06/07/17 21:28:22
教える対象は超初心者です。

専門学校などでJavaを勉強されていて夏休みだけ教えたいという方も歓迎です

291:284
06/07/17 21:46:20
いきなり缶詰ー>架空請求スパムの送信

292:デフォルトの名無しさん
06/07/18 01:36:11
亜米利加の特許は先発明制だから、いくらでも先行特許あるよ。

293:デフォルトの名無しさん
06/07/18 03:38:48
>>290 = >>291
自分でマルチして、自分で突っ込んでる

294:デフォルトの名無しさん
06/07/18 18:28:56
HibernateのHQLで select sum(*) の返り値を
IntegerじゃなくてLongで取得したいのですが、いったいどうすれば…

295:デフォルトの名無しさん
06/07/18 20:19:24
>>293
IDも出ない板でよく言うよ

296:デフォルトの名無しさん
06/07/19 01:07:07
>>294
URLリンク(opensource.atlassian.com)
3.2での対応になる

297:デフォルトの名無しさん
06/07/19 02:32:50
>>296
ありがとうございます

丸一日、試行錯誤してしまいましたが
3.2.CR2入れることにします…

298:デフォルトの名無しさん
06/07/22 09:36:29
知らぬ間にこんなの追加されていた。
アノテーションにSQLを書くみたいだが。

URLリンク(download.java.net)


299:デフォルトの名無しさん
06/07/22 11:01:44
BeehiveのJDBC Controlみたいな感じか。

300:デフォルトの名無しさん
06/07/23 02:09:26
俺も同じようなコンセプトの Object/SQL mapper を作っているのだけれど、標準に搭載されるようじゃ用無しだなこりゃ。アハハ
こういうのなんだけどさ。

@SQL(value = "SELECT * FROM dept", bean = Dept.class)
public abstract List<Dept> readAll();

@SQL(value = {
"UPDATE emp SET salary = salary - {#arg[2]} WHERE id = {#arg[0].id}",
"UPDATE emp SET salary = salary + {#arg[2]} WHERE id = {#arg[1].id}",
}, type = TYPE.UPDATE
)
public abstract void moveSalary(Emp from, Emp to, int price);

完成したら公開しようと思っていたのだけれど、微調整したら公開しちゃおう。エヘヘ

301:デフォルトの名無しさん
06/07/23 09:05:28
>>300
標準のは、CachedRowSetを使っていて、CachedRowSetはJDBCドライバの対応が
必要だから、存在価値としてないわけじゃないと思うけどね。

しかし、どうせなら誰か.NETのDataSetをそのまま実装して欲しいな。
NinjaVAが実装しているけど、DataSetのソースが5000ステップくらいあるのと
微妙に違うので、いまいち使いづらい。

302:デフォルトの名無しさん
06/07/26 23:40:17
>>300
公開期待してます。

303:デフォルトの名無しさん
06/07/28 00:40:27
Hibernate Annotationで質問があります。

簡単なサンプルを作成して実行してみたところ以下のようなエラーが出ました。
Exception in thread "main" org.hibernate.MappingException: Unknown entity: sample.Employee

そこでhibernate.cfg.xmlから<mapping package="sample"/>と<mapping class="sample.Employee"/>
のタグを削除してnew AnnotationConfiguration().configure().addClass(Employee.class)と
したところ問題なく実行できました。

この場合どこが悪くて最初の方法で実行できなかったのでしょうか
使用したライブラリのバージョンは下のやつです。
hibernate-3.2
hibernate-annotations-3.2.0.CR1

304:300
06/07/28 01:33:19
とりあえずサンプルをちゃんと動くようにして、上げました。
BSD License です。

URLリンク(sourceforge.jp)

すいません、ドキュメントが一切ないです。サンプルのソースを見て下さい。

ognlとcglibが必要です。
こちらでは以下のバージョンで動かしています。他で動くかはわからないです。
サンプルを動かすには hsqldb が必要です。1.8.0 を使っています。
 cglib-nodep-2.1_3.jar
 ognl-2.6.7.jar

まだ無い機能、やってないこと
 ログを取る機能
 しっかりしたエラー処理
 HSQLDB以外での動作確認
 ドキュメントを書く
 もっとしっかりしたサンプルを書く
 ソース内のコメント

SQLの中の {#arg[0]} の部分。ここの {} の中に ognl が記述できます。methodの引数が arg という配列に入ってます。

305:300
06/07/28 01:43:02
補足事項
hsqldbで
CREATE TABLE dept (
 id INTEGER NOT NULL IDENTITY,
 name VARCHAR NOT NULL,
 PRIMARY KEY(id)
);
としていて、
INSERT INTO dept (name) VALUES ('name');
としたら、id列に値が自動で入ります。

この時id列に入った値を、取り出してbeanにセットしようとしています。
id列に入った値を取り出す方法が、RDBMSによってマチマチ?なようです。
で、とりあえず、SQLアノテーションのtypeというパラメータで使い分けるようにして、

 INSERTした直後にCALL IDENTITY()とやって、その値をセットする方法を、CREATE_IDENTITY
 PreparedStatementでINSERTしたあと、PreparedStatement#getGeneratedKeysする方法を、CREATE_GENERATE
 INSERTしっぱなしでbeanに値を入れるのを放棄する方法を、CREATE

としてますので、使う人は使いわけて下さい。
IDENTITYを設定した列が2コあったらどうなるんだ?とか、まとまり切っていませんので。

306:300
06/07/28 01:44:30
始めてオープンソースでソフトを公開しました。
ドキドキしています。

307:デフォルトの名無しさん
06/07/28 01:54:41
早速パクって儲けさせていただきました。無料で公開してくれてありがとう。

308:デフォルトの名無しさん
06/07/28 08:15:21
>>304
乙!
と思って、早速いろんなDBで動作確認…と思ったら、
リリース物件もソースコードリポジトリも空っぽですよ?

309:300
06/07/28 08:23:51
俺のアカウントからなら見られるのに……
俺sf.jpの使い方わかってないぽいので、しばしお待ちを……
スレ汚してすいません。

310:デフォルトの名無しさん
06/07/28 09:41:06
>>300
頑張れ。君に期待している。

311:デフォルトの名無しさん
06/07/29 00:47:50
>>300
私も期待しています。
頑張ってください。

312:デフォルトの名無しさん
06/07/29 01:58:50
>>308
DL出来るようになってるみたいだね

313:デフォルトの名無しさん
06/07/30 04:53:44
sfはリリースしてから実際にDLできるまでにラグがあるらしい

314:ストーカー
06/08/03 01:49:49
URLリンク(crudfactory.sourceforge.jp)
こんなんできてるYO!

315:デフォルトの名無しさん
06/08/03 11:29:37
メモリに入りきらないぐらいの巨大なテーブルをSELECTして、一件ずつ処理したいと思っています。
Hibernateを使おうかと考えていますが、ネットの入門を見ている限りSELECTした結果を一気に取得しているようです。
全件一気にオブジェクト化するとメモリが足りなさそうなのですが、こういう用途はJDBC使って1件ずつ取り出した方が良いんでしょうか?

316:デフォルトの名無しさん
06/08/03 11:56:03
1件ごとにSELECTすると効率が悪いから
何十件かまとめてSELECTするよろし。

それにそもそも、巨大なテーブルを全部変更するなら
ストアドプロシージャのほうが圧倒的に効率がいい。

317:315
06/08/03 12:48:31
書き方が悪かったですね、申し訳ないです。
SELECT * FROM TABLEして全件取得して、ResultSet.next()で1件ずつ処理したいって事なんです。
Hibernateの入門ページ見てると、検索結果がListで一気に戻ってきているようだったので。
つまり聞きたいのは、検索結果全件を一気にオブジェクト化するとメモリが足りないので、
検索結果全件の中から1件ずつオブジェクト化して処理できないかな?って事です。

ListのgetやIteratorのnext時にオブジェクト化されていたら問題なさそうなんですか。
って書いてたら聞くより本なり読んでちゃんと理解してから判断した方がいい気がしてきた・・・。

318:デフォルトの名無しさん
06/08/03 13:24:03
>>713
素のJDBCだと 一方向に読み込み専用 で取得すると
一気には取ってこないみたいだね

319:315
06/08/03 16:36:42
>>318
それをO/RマッピングでやってみたいんですがやっぱJDBC使わないとダメなんでしょうかね。
ふむむ、できないとしたら分割してSELECTするなり工夫が必要かぁ・・・。

320:デフォルトの名無しさん
06/08/03 16:52:08
>>315
Hibernate使ったこと無いけど、lazy initializationを有効にすると
取得したコレクションからオブジェクトを取得するときまで
インスタンス化を遅らせることができるそうだ。
URLリンク(www.hibernate.org)
つうかドキュメント読め。

321:315
06/08/03 17:14:37
>>320
おお、良い感じですね。
問題はいらなくなった読み込み後のオブジェクトがちゃんとゴミ掃除されるかどうかだけど・・・とりあえずいろいろ読んでみます。
dクス!!

322:デフォルトの名無しさん
06/08/07 18:33:15
Beanて、テーブル毎に一つ作るものでしょうか?
INSERT目的なら全カラム必要になるだろうけど、
SELECT目的なら一部のカラムのみで十分なケースってあると思うんです。

例:
BOOKというテーブルはID、名前、著者名、カテゴリ情報、概要等、
本に関する情報を多数持っているが、
検索結果に表示するのは名前だけで十分、という場合。

この時ID、名前以外の情報まで持ってくるのは非効率な気がするのですが、
このSELECT目的に別にBeanクラスを定義するというのはアリでしょうか。

class Book { 全カラム }
class BookForSearchResult { ID, 名前 }

それとも、この程度の効率はO/Rマッピングを使用する以上、
気にしない方がいいんでしょうか。

323:デフォルトの名無しさん
06/08/07 19:15:38
>>322
どうしても気になるのなら、IDと名前だけのビューを作って、
そのビューとBeanをマッピングしたらどうでしょう?

324:デフォルトの名無しさん
06/08/08 01:42:02
hibernate使ってたけどいろいろ面倒くさくなってきたのでCommonsDbUtilsに戻してしまった。
なんかすがすがしい気分になった。

325:322
06/08/08 11:09:26
>>323
なるほど、ビューを対象にするなら違和感ないですね。
カラムを限定するようなケースが発生するのは大概検索画面なので、
わざわざビューを作る、というのもアリが気がします。
ありがとうございます。

326:デフォルトの名無しさん
06/08/08 19:12:24
OJB 1.0.4を利用しようと思ってソースとバイナリを取ってきて
動かそうとしているのですが、junit test suiteがFailureを出します。

WinXP (SP1)
JDK 1.5.0_06
lib等は、
antは1.6.5を別途導入。junit.jarはojb1.0.4のをcopy
DBはデフォルトのhsqldb (入手したママ)

でるFailure (1件のみ)
testReportPathExpressionForExtent2
check size expected:<2> but was:<0>

(その他実行結果のファイルにはNOT_EXISTテーブルがないとかもでている)

OJBのドキュメント等やMLも読んだのですが、junit testについては
(hsqldb)についてはそのまま動くとのことで、どう修正すれば
動かせるのかどうかわからなくて困っています。

ここでいいのかどうかわからないのですが、よろしくお願いします。

327:デフォルトの名無しさん
06/08/09 00:20:58
まだ見てるかわからんが、HibernateならScrollableResultsがある。
ResultSetと同じようなカーソル的な使い方ができるので、
適度にevict()しながら処理すればいいと思われ。

328:デフォルトの名無しさん
06/08/17 18:09:46
正直O/Rまっぱーの利点がわからん。
簡単な表結合ならSQL書いちゃったほうが早いし
難しい表結合はO/Rまっぱーじゃ結局無理だし。
なにがいいのか俺にもわかるように説明してくれ。
DTO自動で作るだけならエクセルマクロで十分だし。

329:デフォルトの名無しさん
06/08/17 18:22:18
そのエクセルマクロ生成コードにむかついた人が張り切ってしまって
できたのがO/Rマッパー。
むかつかない人はそのままでいいよ。

330:デフォルトの名無しさん
06/08/17 18:29:30
>簡単な表結合ならSQL書いちゃったほうが早いし
ORMの利点は、「SQLを書かなくていい」ではない。

>DTO自動で作るだけならエクセルマクロで十分だし。
それを「車輪の再発明」と言う。
ダメエンジニアが行う愚行の一つ。



331:328
06/08/17 18:32:31
>>330
で、結局利点はなんなのでしょうか(^^;

332:デフォルトの名無しさん
06/08/17 18:35:56
>>329
個人の趣味で使うものってことでしょうか??
仕事で使うもんじゃないってことでFA?

333:デフォルトの名無しさん
06/08/17 18:42:12
>>331
オブジェクトとSQLのマッピング作業をフレームワークがやってくれる点。

334:デフォルトの名無しさん
06/08/17 18:43:03
>>329のレスから>>332のような結論が出る時点でDQNエンジニア確定だな。

335:デフォルトの名無しさん
06/08/17 18:46:33
ぶっちゃけ俺DQNエンジニアだとおもう。
まっぱーの利点とか理解できないし。
だから教えてくださいお願いします。

>>333
マッピングってDTOつくって、ResultSetから値を取り出してDTOに入れていくってことですか?
ただそれだけですか?
そこでそんなにバグが出たり工数がかかったりしてるんですか?

336:デフォルトの名無しさん
06/08/17 19:01:57
>>335
検索だけじゃなくて、挿入・更新のときのマッピングもね。

DQNかも知れないエンジニアを大量に使わざるを得ないプロジェクトで、
テーブル数が数十個ある場合で、カラムの追加変更などがある場合でも
フレームワークにやらせるよりも手作業の方が早くて確実なら使う必要はないだろう。


337:328
06/08/17 19:10:21
それだけしか利点がないならやっぱ内の会社にはいらないのかもしれない。。
ほんとにそこでみんな困ってるの???
そのあたりって仮にまちがえてもテスト段階でバグ発見しやすい部分だと思うし
そもそもDTOに入れたり出したりするのなんてそんなに大変な作業でも
ないとおもうんですが・・・。

うちのシステムもテーブル150ぐらいあるし、
カラムの追加変更もときどきあるけど
一度に追加変更されるのって2、3テーブルぐらいのものだし
それだけのためにxml書いたりといった面倒な作業が
工数的、費用的ににペイするのかしら??

あたらしいもの好きな人たちが趣味でやってる領域なのでは?
実際に業務に使ってるひといるの???

338:デフォルトの名無しさん
06/08/17 19:25:27
XMLファイルを手書きしてたらメリットは感じないたろうね。
トータルの記述量はあまり減らないし、かえって面倒と感じるだろう。
そこは自動生成するところだよ。

339:デフォルトの名無しさん
06/08/17 19:32:14
ORM=XML設定ファイル必須というわけでもない。
S2DAOや、Hibernate Annotation、EJB3はXMLによるマッピング不要だ。

340:328
06/08/17 19:39:49
XMLをテーブル定義から自動作成する工数と
DTOなど自分でコーディングする工数

システム開発全体にかかる工数から比較したら
これらが締めるのは微々たるものでは?



341:デフォルトの名無しさん
06/08/17 19:51:09
>XMLをテーブル定義から自動作成する工数と
>DTOなど自分でコーディングする工数

ちがう。
テーブル定義からXMLとDTOとを自動生成する工数と
DTOを自分でコーディングおよびSQLとDTOの値の受け渡し処理の
コードを書く工数とその部分をテストする工数の合計だ。

後者の方が早くて確実なら使う必要はない。

342:328
06/08/17 19:54:00
その2つだけをくらべたら後者のほうが遅くて不確実なんですが
OR mapperに潜んでいるバグのリスクや、
各OR mapperの使い方を覚える工数を考えたら
やっぱ使わないって判断かなあ。
そもそもわざわざ導入したところで削減できる工数が少なすぎるような気が。

あんだけ雑誌やネットで騒がれておきながら
メリットってこんだけなの?
なんかほかにメリットないのかしら・・。

343:デフォルトの名無しさん
06/08/17 19:54:11
そう感じてて、それで本当にいい! ノープロブレム!
って思うなら、それでいいじゃねえか。

俺はDTOを自分で書くなんて冗談じゃねえが。
Hibernate Annotationでハッピーライフ。

344:328
06/08/17 19:57:38
いや、どう感じるかは問題ではなく
客観的な指標から判断して
どちらが生産性の向上につながるのかが知りたい。

なんでこれだけのものにみんな大騒ぎしてるんだろう?
なんかあるのでは?って思ってしまう。

345:デフォルトの名無しさん
06/08/17 20:02:51
生産性にまともな測定方法なんてネーヨ
むかつくやり方を続けると、精神衛生に悪くて生産性が下がる。
それだけ。

346:デフォルトの名無しさん
06/08/17 20:35:55
>OR mapperに潜んでいるバグのリスク
おまいのところがGavin Kingより優秀な開発者を抱えてるならリスクとなり得るなw

347:デフォルトの名無しさん
06/08/17 20:47:21
>>345
それは真理だな。

>>344
なんにもないから安心しろ。
頑張って車輪を発明し続けてくれ。

348:デフォルトの名無しさん
06/08/17 21:04:21
>>346
マジレスすると、Kingよりも優秀な奴が一人いてもダメだと思う。
HibernateやS2DAOがどれだけの人に動作検証されているのかを考えると、
それ以上の動作検証ができて、はじめて
「OR mapperに潜んでいるバグのリスク」が自作コードより大きくなると言える。

349:デフォルトの名無しさん
06/08/17 21:37:15
>>348
自作コードの方が普通は仕様が小さいから、
同程度の品質を確保するのにそこまでの動作検証は要らないけどね。

350:デフォルトの名無しさん
06/08/17 22:30:32
ORマッパには、いままでの長い期間で発見されたパフォーマンス
改善手法がデフォルトで組み込まれている。

ORマッパの大部分は関連テーブルのレコードを自動的に取得
できる。

百人がよってたかってデバッグしたコードと、どっかの中小企業が
自分たちのしょぼいプロジェクト用に作って二人か三人でデバッグ
したコードでは、前者の方が信頼性が高い。

ただし1テーブルのデータちょっと取ってくるだけ、しかもテーブル間
リレーションもほとんどない、毎回SQLをコンパイルさせる程度の
負荷などまったく気にしない、とかなら別に使う必要はなし。

351:デフォルトの名無しさん
06/08/17 22:36:31
大量のデータをinsertするような、バッチ的処理には向いてないね。
あくまで、オンライントランザクション処理を簡易化するためのフレームワーク。
万能ではない。


352:デフォルトの名無しさん
06/08/17 23:09:32
まずはテーブルの構造からO/Rマッパー的に作る必要がある。
それができないプロジェクトは、リプレースするか、捨てるか。どっちかしかない。

353:デフォルトの名無しさん
06/08/18 00:54:27
>>328
とりあえず何か動かしてみたりはしたの?
Hibernateなら、ツール使えばスキーマ読み込んで勝手にクラス作成までやってくれるから
一度適当に使って試してみたら?
結局ツール適用のメリット有無なんて、対象システムや開発環境との相性だからな


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4499日前に更新/245 KB
担当:undef