[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 10/04 08:14 / Filesize : 245 KB / Number-of Response : 874
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 11:54:44 ]
前スレ:
 Java⇔RDBのMapping-Frameworkを語るThre Vol.3
 ttp://pc8.2ch.net/test/read.cgi/tech/1090653286/
過去スレ:
 「Java⇔RDBのMapping-Frameworkを語るスレ Vol.2」(落ち)
 ttp://pc5.2ch.net/test/read.cgi/tech/1086315004/
 「Java⇔RDBのMapping-Frameworkを語るスレ」(落ち)
 ttp://pc5.2ch.net/test/read.cgi/tech/1049030272/


●まずは、基礎知識と技術選択指針など
 [The Fundamentals of Mapping Objects to Relational Databases]
  (RDBに対するオブジェクトマッピングの基礎(英語))
  ttp://www.agiledata.org/essays/mappingObjects.html

 [O/R-Mappingツールの比較サイト(英語)]
  ttp://c2.com/cgi-bin/wiki?ObjectRelationalToolComparison

 [Catalog of Patterns of Enterprise Application Architecture (PoEAA)]
  ttp://www.martinfowler.com/eaaCatalog/

あとは>>2以降


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

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

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

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

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

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

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


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

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

354 名前:デフォルトの名無しさん mailto:sage [2006/08/18(金) 01:31:01 ]
>>176
忘れた頃に禿同

オレもエンティティにビジネスロジックを書きたくなってしまう。
GRASPじゃないけど、OO的に考えるなら、データに近いところへ
メソッドを寄せ集めておきたいんだよな・・・

自動生成されたエンティティをサブクラスするのはちとキモイしねぇ


355 名前:デフォルトの名無しさん mailto:sage [2006/08/18(金) 07:19:44 ]
>>176,354
>自動生成されたエンティティをサブクラスする
ちょっと意味不明だけど

任意のクラスを継承したエンティティを自動生成できるツールがほとんどだよ

356 名前:デフォルトの名無しさん mailto:sage [2006/08/18(金) 07:48:13 ]
>>355
クラス継承によるロジック共通化をフレームワーク単位で行うと、クラスの拡張性が著しく損なわれるので
最近は避けられる傾向にある
最近DIコンテナを使った開発で多用されているのが、委譲による疎結合。
その場合はステートレスなロジッククラスが利用される。
これとドメインモデルとの相性がイマイチなのがORマッピング利用時の問題
ORマッパー自体がDIをサポートして、ロジックを委譲するオブジェクトを注入してEntityを作成することが出来れば
ドメインモデルでも疎結合でロジックを構築できるのでは?・・・という話



357 名前:デフォルトの名無しさん mailto:sage [2006/08/18(金) 08:00:02 ]
>>356
>>354からそこまで読み取れたらネ申だな。

358 名前:デフォルトの名無しさん mailto:sage [2006/08/18(金) 08:42:51 ]
>>176を先に読めよw

359 名前:デフォルトの名無しさん mailto:sage [2006/08/18(金) 18:56:37 ]
iBATIS2.2.0(β)

360 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 00:12:40 ]
あれ?
iBATIS2.2.0って、ストアドプロシージャと
Beanとのマッピング出来るようになったん?


361 名前:デフォルトの名無しさん [2006/09/05(火) 02:43:56 ]
ついに1000体突破かよ
アイロボットみたいだな
株ロボもいつか夢を見るようになるのかなぁ

362 名前:デフォルトの名無しさん mailto:sage [2006/09/06(水) 11:11:38 ]
貼っとく
[ThinkIT] 第7回:それぞれのメリット/デメリット (1/3)
ttp://www.thinkit.co.jp/free/article/0606/13/7/

363 名前:デフォルトの名無しさん mailto:sage [2006/09/08(金) 15:08:40 ]
質問なんですが
Hibernateでsessionキャッシュ上の永続オブジェクトに対して
オブジェクト単位での変更チェックは出来ないんでしょうか?

bool Session#isDirty(Object o, ...)みたいなものがあればいいのですが...



364 名前:デフォルトの名無しさん mailto:age [2006/09/26(火) 00:45:24 ]
キましたね。iBATIS。

ストアドプロシージャとBeanのマッピングOK。
サンプル書いて確認とれました。

sqlMap.queryForObject(query, map);
ArrayList list = (ArrayList)map.get("out");

for(int i=0; i<list.size(); i++){ Bean bean = (Bean)list.get(i); bean.getId();}

SpringFrameworkと連携するときは使えないかもしれないけどね。
とりあえず、Map(HashMap)->ArrayList->Beanの順に格納されているので、
1コ1コ取り出さないといけないのがメンドイ。

つーか instanceofで確認取らせんな!( ゚Д゚)ゴルァ!!


365 名前:デフォルトの名無しさん mailto:sage [2006/09/26(火) 01:16:45 ]
あいばてぃす?
あいべいてぃす?

366 名前:デフォルトの名無しさん mailto:sage [2006/09/26(火) 01:26:28 ]
いーばてぃす



367 名前:デフォルトの名無しさん [2006/09/26(火) 01:36:02 ]
ibatis.apache.org/background.html

ここ読むと

>We pronounce it: eye-BAT-iss

ってあるから、あいばってぃす?

368 名前:デフォルトの名無しさん mailto:sage [2006/09/26(火) 02:22:18 ]
シンクイットって登録しないと読めないから資料価値ない。
グーグルキャッシュに入らないマイコムにも言えるが。

エクセルマクロ生成コードにむかついた人が張り切ってしまってできたのがO/Rマッパーなのはいいが、漏れはO/RマッパーのXMLファイル作成にムカつくのはどうすれば良い?
誰かエクセルマクロからXML生成するツール作ってない?
つーかxlsファイル自体を読み込んでO/Rマッピングしてくれってのが、.NETのノリ?

369 名前:デフォルトの名無しさん mailto:sage [2006/09/26(火) 02:44:42 ]
>誰かエクセルマクロからXML生成するツール作ってない?
当然みんなつくってんじゅねぇーの?
一々仕様書から写す手間を考えるとそりゃマクロで吐き出させるだろうし。

こういうのってオープンソースで一個作っちゃったほうがいいよーな気もするよな。

370 名前:デフォルトの名無しさん mailto:sage [2006/09/26(火) 08:09:54 ]
作ったらOSSとして公開でいいんじゃない?w

371 名前:デフォルトの名無しさん mailto:sage [2006/09/26(火) 13:10:33 ]
ソースはどこにうpされてるの?


372 名前:デフォルトの名無しさん mailto:sage [2006/09/26(火) 20:32:49 ]
会社で作ってて、パッケージ名までcom.なんとかになってるから、
さすがに公開はできんわw

373 名前:364 mailto:sage [2006/09/26(火) 21:23:18 ]
SpringFramework + iBATIS でのPL/SQL連携を確認。

つーかさ、DBの問い合わせから戻ってきた値が
<parameterMap>のclass要素のオブジェクトにマッピングされるのはいいんだが、

public List findList(String query, HashMap map)throws DataAccessException
{ return (List)getSqlMapClientTemplate().queryForList(query, map); }

↑のコードの意味無いじゃん。↑のメソッドを ArrayList list = (ArrayList)dao.findList(query, map);
で呼び出すんだけど、結局引数に渡したmapオブジェクト変数に格納し直されるっていう動作はどーなのよ。
いいの?これ。

どーいう意味かの解説は ttp://canetrash.seesaa.net/article/2656752.html にあるんだが、動作的にねぇ…?
結局引数に渡したmapからListを取り出して、さらにBeanを取り出して…。

メンドクサーですよ。O/R-Mapperってこんなんなん?いや、動作的にはO/R-Mappingなんだろうけどさ。
識者コメント&ツッコミ・キボンヌ。



374 名前:373 mailto:sage [2006/09/26(火) 21:46:39 ]
あー、でも ttp://www.h7.dion.ne.jp/~a.d.1976/naguri20050307.html
見ると

--------------
sqlMaps で SQL を実行する時のパラメータとして使えるクラスには次のものがあります。

・Bean
・Map
・プリミティブクラス(Integer など)
--------------

ってなってるから、だめだ。Map or Beanじゃないと。orz


375 名前:デフォルトの名無しさん [2006/09/27(水) 07:55:54 ]
O/Rマッパーじゃないけど、RailsのMigrateみたいなDBのバージョン管理できるJavaプロダクトって何かありますか?
あーゆーの欲しい。

376 名前:デフォルトの名無しさん mailto:sage [2006/09/29(金) 01:08:11 ]
>>368
blancoDb だろ。Excel O/R マッパー。
俺はそれを作ってる、いがぴょんっていう奴の顔がキモすぎて
試してもない。違うんかもしれんが。



377 名前:デフォルトの名無しさん [2006/10/07(土) 04:01:15 ]
やっぱHibernate最高ですよね?
うちの会社に導入しようと思っています。
いまどきJDBCでSQL直書きなんて氏ねばいいと思います。

378 名前:デフォルトの名無しさん mailto:sage [2006/10/07(土) 04:23:21 ]
導入前に氏んでいるわけだな。

379 名前:デフォルトの名無しさん mailto:sage [2006/10/07(土) 08:56:57 ]
>>377
Hibernateがいいときもあるし、JDBCでSQL書きがいいときもあるし、iBatisがいいときもある。
最高ではない。

380 名前:デフォルトの名無しさん mailto:sage [2006/10/07(土) 09:48:02 ]
まあいまどきJDBCのようなところはとりあえず入れたほうがいいな。
見聞を広げるちゅー意味でも。

381 名前:デフォルトの名無しさん mailto:sage [2006/10/07(土) 11:13:58 ]
同意。
Hibernate最高とか言っちゃわない程度には触っておいたほうがいいな。

382 名前:デフォルトの名無しさん mailto:sage [2006/10/07(土) 11:46:24 ]
適材適所。「最高」なんてものは無い。

383 名前:377 [2006/10/08(日) 10:47:35 ]
いや、Hibernateは上級レベルの達人たちが
ものすごい工数をかけて作成したフレームワークだ。

Hibernateありきだ。

最初に。

もちろんHibernateではダメだというケースも
あるとは思うが、まずはHibernate最高と思っておいて
問題ないのでは?

384 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 11:14:28 ]
JDBC APIだって上級レベルの達人たちが
ものすごい工数をかけて作成した仕様なのだが・・・


385 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 11:25:44 ]
妄信してる信者の発言にしか聞こえない。
結局はどれが良いのか客観的に語ってよ。

386 名前:377 [2006/10/08(日) 11:26:36 ]
いや、Hibernateも内部でJDBCを使っている。

どんなシステムでも大抵、JDBCを利用するための
フレームワークを作っているだろうが、
そういうフレームワークとしてHibernateに
勝てるわけがないということだ。



387 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 14:01:29 ]
うちなんてHibernateどころかServletすら使えないよ
DBまわりはWrapperがあるけど
BroadVision6...

388 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 14:15:17 ]
>そういうフレームワークとしてHibernateに
>勝てるわけがないということだ。

すげぇ盲信っぷりにワロタ。

389 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 18:44:47 ]
まあ言い方はあれだけどw、
日本の会社が自社で作っていたものとは次元が違う存在というのは言うまでもない。
すべてのケースに適しているとはいえないが、
使ったこともないじゃORマッパーを語れないな。

俺はjar(というか使ってるクラス)があまりにも多すぎるところがいやだな。
入れたら起動も死ぬほど重くなるし、OutOfMemoryにもなりやすい。
サーバーにいくつもHibernateを使ってるWebAppがあったら目も当てられない。

390 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 19:11:56 ]
そんな貧相な鯖で Java を動かすこと自体が間違ってる。

391 名前:デフォルトの名無しさん mailto:sage [2006/10/08(日) 23:17:11 ]
フレームワークは目的ではなく手段。
無駄な残業したくないなら要件にフィットするものを選ぼう。
冷静に、冷静に。

392 名前:デフォルトの名無しさん mailto:sage [2006/10/09(月) 01:04:59 ]
あれこれ選び分ける程の余裕もスキルもありません。
可能な限り「標準」で行きたいのだけど。

JPAはしばらく安定しないだろうなぁ・・・

393 名前:デフォルトの名無しさん mailto:sage [2006/10/09(月) 03:36:02 ]
>>386
Hibernate に詳しいようだから、使ってみた感想でいいから
他のいくつかの O/R マッパーと比較して何かいいか
教えてくれないか?

俺には何がいいかさっぱり分からんので。

394 名前:デフォルトの名無しさん mailto:sage [2006/10/09(月) 04:56:36 ]
まずいエサだがスレの内容には沿ってるな>393

Hibernateのよさは、資料が多いことだな。

俺はCayenne > Hibernateだと思う。複雑なクエリを
HQLで書くのは俺には無理。

395 名前:デフォルトの名無しさん mailto:sage [2006/10/09(月) 05:56:46 ]
>>393
質問がO/Rマッパーの有用性は

396 名前:デフォルトの名無しさん mailto:sage [2006/10/09(月) 06:29:22 ]
ごめん、途中で送信した

O/Rマッパーの有用性はわかるけど、Hibernateの優位性がわからないのか
O/Rマッパーの有用性がわからないのか、どっちなんだ

前者ならJPA実装の中でも枯れてるしData Mapperパターンでは決定版に近いってレスになるし、
後者なら、そうですねってレスになる




397 名前:デフォルトの名無しさん mailto:sage [2006/10/09(月) 11:29:44 ]
O/R マッパー自体の有用性が分からない、つーのはスレ違いじゃね?

有用性があるのが前提で、優劣を議論するのがスレの趣旨じゃね?

398 名前:デフォルトの名無しさん mailto:sage [2006/10/09(月) 19:50:13 ]
>>397
適用範囲を把握するという意味では、
有用性自体を問うのもありだと思ふなり

399 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 10:05:46 ]
ド短期製造、お前らなら何使う?
製造期間 10 日、マスタメンテ 3 機能。
DB 設計済み(複合キー)、検索条件は可変多し。
製造担当はたぶん JDBC 直以外知らない。
学習工数、製造工数の少なさを最優先。

JDBC 直、Hibernate、iBatis、DBUtils、、、

400 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 10:20:46 ]
>製造担当はたぶん JDBC 直以外知らない。
>学習工数、製造工数の少なさを最優先。

10日間に学習工数も含めるのなら、断然JDBC直。

フレームワークは学習コストがそれなりにかかることを
認識しておかないと痛い目を見る。
それを認識できてない奴が「生産性が低い」と騒ぐんだ。

強いて何か覚えるなら、ORMよりもDbUnitでも覚えておいた方がいいんじゃね?

401 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 14:16:27 ]
>>399
MS Access

402 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 14:50:21 ]
短期なのに学習コスト込み?てか10日?
ギャグのつもりじゃなかったらやめたほうがいいだろう。

403 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 15:28:56 ]
>>399
JDBC 直

404 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 16:47:16 ]
JDBC直よりは、closeし忘れとかを防止する意味で、
DBUtilsの方がいいんじゃない?
まあ、10日であることを考えたらJDBC直でもいっか。
悩んでいる暇があったら、早くやれって感じだ。

405 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 17:31:45 ]
JDBC直でResultSetMetaDataとDatabaseMetaDataをひっぱって
全テーブル同じクラスで処理する。

406 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 18:07:12 ]
>>399
JAVA止めて、お前がLLで作る



407 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 23:48:22 ]
仮に実装担当者が「色々とORM知ってます」と言ってきても
ちょっとしたもんならJDBC直(or 学習コストがかからん DbUtils)で十分。
後々メンテ担当者がチェンジする時のリスクも小さかろう。

408 名前:デフォルトの名無しさん mailto:sage [2006/10/14(土) 23:57:44 ]
>>400
DbUnit も知らんとか言ってたな。
一応、俺が Struts 上にアクセス制御、セッション管理、ログ、エラー制御あたりの
共通部を 2 日ぐらいで俺が作って後は任せようかと思ってる。
Click か Wicket も考えたけど 10 日じゃこわいんでやめとこうと思ってる。

>>402
俺はフリーで複数案件やってて60 万で案件とろうとしてるだけだ。
60 万ぽっちじゃ、10 日ぐらいでやらんと割りにあわんだろ。
部下の勉強がてらに良いと思ったんだけど意見を聞きたかった。

>>404
JDBC 直で close し忘れ防止は Session in View パターンで
ServletFilter でも作るわ。

>>405
結果は Map に格納すんの? リフレクションで Bean?
昔作ったような気もするけど、それだったら何かあるやつ使うかなー。

409 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 00:08:49 ]
>>408
勉強がてらなら、もっと納期が厳しくない案件でやらせた方がよくない?
確実に作らせたいのなら、担当のスキルと日程をふまえて指示する側が見極めないとな
あと、DbUtilsにするんなら、1.0は色々問題があるからdevelop版を使ったほうがいい。

410 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 00:33:13 ]
可変長の引数が可能ですが、引数取り出しの扱いがわかりません。
function! AllRead(...)
while args
r args
endwhile
endfunction
どうすればいいでしょうか?

411 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 00:50:59 ]
>>409
thx。DbUtils か JDBC にするわ。

412 名前:デフォルトの名無しさん mailto:sage [2006/10/15(日) 00:52:05 ]
>>410
何のハナシをしているのかわかりません

413 名前:デフォルトの名無しさん mailto:sage [2006/10/17(火) 13:36:28 ]
Hibernate 3.2.0 GA
Hibernate Annotations も Hibernate EntityManager も同時に 3.2.0 GA

414 名前:デフォルトの名無しさん mailto:sage [2006/10/17(火) 18:53:38 ]
ガッはなんだガッは

415 名前:デフォルトの名無しさん mailto:sage [2006/10/17(火) 23:30:51 ]
Generally Available


416 名前:デフォルトの名無しさん mailto:sage [2006/10/18(水) 00:07:08 ]
>>414
ぬるぽ



417 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 21:05:50 ]
以前ibatisで使った開発のときテーブルごとのクラスに結果を詰め込むようにしてたんだけど
結合テーブルのSQLなんかのとき都度それにあった結合テーブルクラス(必要なカラム以外もすべて定義)を使って結果を返していた

つまり結果は絶対SQLのと同じ表形式だったわけなんだけど
普通そういう設計するの?

418 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 21:10:26 ]
複合キーのテーブルの場合代理のキーを作ってDB設計したほうがHibernateとかでは使いやすい
と同僚が言ってた。代理キーはシーケンスで振っていくようにするといってたけど
そうすっと一意制約が保障できないような気がするが、回避方法あるのかい?


419 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 21:19:31 ]
>>418
UNIQUE制約ってしってるか?

PRIMARY KEYとは別にUNIQUE制約をかければいいだけだよ。

420 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 22:18:09 ]
>>419
そりゃそうだ。なんできずかなかったんだろ。ありがとござんした

421 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 22:18:15 ]
>>418
一意になるように代理キーで、作るべきだと思うけど。

422 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 22:19:52 ]
ああ、勘違いした。複合キーが一意であることね。
ごめん

423 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 22:23:01 ]
>>417
例えば、どうなってほしいの?
クラスを作るのが面倒ならば、Mapを使ってもよいと思うが、そうなるとタイプセーフではなくなる。

424 名前:デフォルトの名無しさん mailto:sage [2006/10/22(日) 22:56:42 ]
>>423
あーたとえばですね、親子関係のテーブルなんかの場合
親テーブルクラスに、子テーブルクラスを保持するフィールドもたせて
クエリーの結果をそういう感じで保持すんのかな?とおもって。


425 名前:デフォルトの名無しさん mailto:sage [2006/10/25(水) 23:30:26 ]
Hibernate で直に SQL 発行して結果を
Map のリストで受け取ることってできますか?

Hibernate を使わなければならず、
でも結果は Map で返さんとだめで、
entity クラスも作成できないんです。

426 名前:デフォルトの名無しさん [2006/10/25(水) 23:31:47 ]
保守



427 名前:デフォルトの名無しさん mailto:sage [2006/10/26(木) 00:59:39 ]
>>425
たぶん駄目じゃない。
Spring使ってるならJdbcTemplate。ないならDbUtilsでごまかしとけば。

428 名前:デフォルトの名無しさん mailto:sage [2006/10/26(木) 01:38:43 ]
>>427
助かりました。
JdbcTemplate#queryForList
でごまかせるような気がします。

429 名前:デフォルトの名無しさん mailto:sage [2006/10/26(木) 02:16:00 ]
>>425
Mapによるマッピングには対応している

www.hibernate.org/hib_docs/v3/reference/en/html/persistent-classes.html#persistent-classes-dynamicmodels

430 名前:デフォルトの名無しさん [2006/11/02(木) 00:22:59 ]
dbutils 1.1 ってまだ開発中?
使いたいのだけど、1.0はだめだって聞いたんだけど。。
他のがいろいろでてきたからもう開発ストップしてるんかな。

431 名前:デフォルトの名無しさん mailto:sage [2006/11/02(木) 02:12:45 ]
>>430
dbutils、シンプルで使いやすいから愛用してるんだけど
あんまり使ってる人いないのかな?

432 名前:デフォルトの名無しさん mailto:sage [2006/11/02(木) 03:48:26 ]
何故だか各種ORMと比較されてショボイと思われてる感はあるかも。
個人的にはQueryRunnerがPreparedStatementを
基本、隠蔽する方向になってるのが何だか惜しいって印象。
まあ、そうしてもらうと楽な面も、もちろんあるんだけど。

433 名前:デフォルトの名無しさん mailto:sage [2006/11/03(金) 02:24:54 ]
>>431
俺も愛用している。
設定ファイルいらずだし、MapListHandlerの結果をJSP内のELで使うと超ラクで気に入ってます。

434 名前:デフォルトの名無しさん mailto:sage [2006/11/03(金) 08:33:31 ]
dbUtils、いいんだけどBeanHandler使うときのフィールド名とプロパティの
マッピングが普通とちがうのがちょっとなぁ。あれは直してくれんかな。

435 名前:デフォルトの名無しさん mailto:sage [2006/11/03(金) 14:55:01 ]
>>434
普通と違う?


436 名前:デフォルトの名無しさん mailto:sage [2006/11/03(金) 18:02:24 ]
booleanのときとか?



437 名前:デフォルトの名無しさん mailto:sage [2006/11/03(金) 21:53:02 ]
>>434
フィールド名/プロパティ名が2語以上から成るとき、DBでは通常アンダースコア連結、
Javaはキャメルケースで表記するでしょ?
他のORMにはそこを変換してくれるものもあるけど、dbUtilsは単にcase-insensitiveで
比較するだけだから、

SELECT ID_DATA AS IDDATA

とか、

public void setId_Data() {

とか書かないといけない。

438 名前:デフォルトの名無しさん mailto:sage [2006/11/03(金) 22:48:00 ]
DbUtilは、キャッシュも遅延ロードも無いし、
commons BeanUtilsのリフレクション使いまくりだから、目に見えて遅い。
大規模・高負荷なシステムでは使えない。

けど、シンプルで俺は好き。
自社のお問い合わせ送信フォームとか、
小規模なマスタメンテとかで使ってみたことがある。

439 名前:デフォルトの名無しさん mailto:sage [2006/11/03(金) 23:38:04 ]
ORM使ったこと無いので教えてください。

DbUtils以外のORMはリフレクションを使わずに、Beanにどうやって格納したりしているの?
キャッシュが高速なのは分かるのですが、逆に古いデータを読んでしまうことにならないかも気になります。

440 名前:デフォルトの名無しさん mailto:sage [2006/11/03(金) 23:53:58 ]
>>439
キャッシュとDBの同期化をどうするかというAPIも用意されている場合も多いので
アプリケーション側でも制御できるし、デフォルト設定も変更可能な多い。

リフレクションを使わず、バイトコードをゴニョゴニョしたりするフレームワークも多い。


441 名前:デフォルトの名無しさん mailto:sage [2006/11/03(金) 23:57:27 ]
>>439
>キャッシュが高速なのは分かるのですが、逆に古いデータを読んでしまうことにならないかも気になります。
何か勘違いしてるんじゃないか。

442 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 00:37:41 ]
>>440
バイトコードを変えることで、リフレクション使わずにセットしてたりするのか。
それは知らなかった。かなり高度なことをしているんだな。

>>441
こう考えているんだけど、勘違いしてると思った点を教えてくれれば幸い。

キャッシュを使えば、DBにアクセスすることなく、取得済みのデータを再利用するので、高速だと思っている。
「古いデータを〜」と思ったのは、データがすでに更新されたのに、
更新前のキャッシュデータを使ってしまうことがないのか?ということを気にしている。

なんか間違ってるだろうか。

443 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 00:42:51 ]
>「古いデータを〜」と思ったのは、データがすでに更新されたのに、
>更新前のキャッシュデータを使ってしまうことがないのか?ということを気にしている。
ここの意味がよくわからん。
ひょっとして、複数のサーバでそれぞれ同一DBに対して
接続するとか、そういう使用法を考えてるわけ?

444 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 01:01:50 ]
>>438
DbUtils から BeanUtils への依存関係はないんじゃない。

445 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 01:04:14 ]
>>443
>>444じゃないけど、普通は考えるでしょ。


446 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 01:07:56 ]
>>444
すまん。勘違いしていたらすい。
リフレクションAPI直叩きだね。



447 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 01:07:56 ]
複数のサーバとは限らないけど、1つのDBに対して、複数の接続が発生するのが普通では?

キャッシュってのは、DBの複製的な情報を、アプリ側で保持するわけでしょ。
検索→キャッシュ生成→(他スレッドなどがDB更新)→キャッシュの値は更新前の値のまま
もちろん、ORMを使わず更新するとかが、論外なのは分かっているけど。

ここまで書いてきて気づいたのだけど、
1つのDB接続セッション内で、キャッシュされるのかと思ったけど、
全体でキャッシュを共有して持っているということ?
それならば、「更新前のデータを見ない」という意味は、理解できる。

448 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 01:30:13 ]
そもそも>>443みたいな設計がおかしいんじゃないか?
それともEJBのことを指しているのか?だとしたら意味が違うと思うが

449 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 01:31:24 ]
>検索→キャッシュ生成→(他スレッドなどがDB更新)→キャッシュの値は更新前の値のまま
                 ~~~~~~~~~~~~~~~~~~~~~~~
これ何よ。こんなことするなよ。

450 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 01:34:37 ]
アノテーション使えるDbUtilsが欲しい…

451 名前:447 mailto:sage [2006/11/04(土) 01:39:13 ]
>>449
えーと、シングルスレッドで、順番に更新しないと駄目という意味??

452 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 01:44:57 ]
Hibernateのキャッシュは2段階になってる
1次キャッシュ(Session)は一つのスレッド・トランザクションに閉じてる
自分でアクセスしたエンティティを再利用するだけだから遅延はない

2次キャッシュは複数のスレッド・トランザクションで共有されて実装を選択できる
2次キャッシュの実装に分散キャッシュを使えば複数のプロセスでも共有できる
遅延に関しては実装次第
一定時間でリフレッシュするのもあれば他プロセスから更新通知を受けるのもある
分散ロックや分散トランザクションをサポートしたものもある
当然遅延とパフォーマンスはトレードオフだから用途に合わせて実装を選べばよろし

453 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 02:00:11 ]
>>451
そうじゃねーべ。
Hibernateでも何でもいいから一旦勉強してくれ!

454 名前:447 mailto:sage [2006/11/04(土) 02:06:22 ]
>>452
なるほど。
1次キャッシュなら、遅延は無いものの、キャッシュとしての効果は薄いと思うし、
2次キャッシュは、どうしても遅延が発生するだろうと感じていたのです。
キャッシュを利用して高速になるからといって、やはり遅延することを無視できないわけですね。

>>441の話だと、遅延があり得ないように、聞こえたので疑問に思っただけです。

>>453 ごみんなさい。勉強しときます。

455 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 02:13:46 ]
だから、Hibernateのデフォルト設定では
更新前に一旦SELECTして同期するようになっている。

DBを他システムからも操作されることが想定される場合には
SELECTを含むクエリ発行のたびに毎回キャッシュと同期化するようにもできる。

他システムから操作されないのなら、キャッシュを最大限に利用する設定にすることも出来る。


456 名前:デフォルトの名無しさん [2006/11/04(土) 11:04:04 ]
>>438

リフレクションやっぱ遅いのか。
ユーザ数の少ない業務アプリケーションしか作ったことないから、
SQL以外の速度気にしたことないな。。



457 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 11:10:57 ]
気にすることないよ実際。
>438はまともにプロファイリングしたことないかな?
相当いびつな使い方をしない限り影響はない。DBのそれと比べると誤差の範囲。

458 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 12:31:30 ]
なんか Hibernate & DbUtils なモードだな。

DbUtils だけど、キャッシュはともかく、遅延ロードが無いことに関しては
ナマSQLを書く以上、SQLの書き方/コーディング次第な所なんで
大規模・高負荷なシステムで使えんって理由には直結しないんじゃないかな。

459 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 14:10:33 ]
>>457はdbUtilを使ってまともなアプリを作ったことが無いのだろうか。

460 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 16:02:20 ]
大規模・高負荷とか言ってるけど、逆にそういう用途にHibernateとかのORMは
使うのを躊躇するけどな。
キャッシュがあるといっても、このレベルじゃ到底信用できないし。

実際そういうところに使っている人いる?

俺の場合、パフォーマンスが必要なところでは基本JDBC直、得失を考慮したうえで
問題ない部分ではdbUtilsを使って楽をしてもいいかな、という感じ。
Hibernateを使うのは、パフォーマンスをあまり気にする必要がないところで
ちょっと複雑なデータを永続化したい場合だな。

461 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 16:26:06 ]
今のHibernateはEJBの実装。
大規模システムでの利用を前提にしたプロダクトだと思うけど。

462 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 16:42:50 ]
元々EJBは大規模つぅか分散システムのアーキだしなあ。
パフォーマンスクリティカルな案件じゃ
JDBC直(+軽いラッパ)が実状じゃなかろうかと

463 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 21:51:05 ]
一口に大規模高負荷と言っても、同時多アクセスのWebシステムなのか
大量データ一括処理のバッチなのかで大きく違うよね
前者ならHibernateの2次キャッシュが活用できそうだし
後者はやはりJDBC直書きか(というかストアド使えるならそっち使った方がいいかも)

>>462
分散前提のEJB2と分散前提ではなくなったEJB3は大きく異なる。
更に、EJB3からも独立したJPAは分散とは無関係

464 名前:デフォルトの名無しさん [2006/11/04(土) 23:04:37 ]
Hibernateにはバッチは向いてないの?

465 名前:デフォルトの名無しさん [2006/11/04(土) 23:05:40 ]
うちの会社でHibernateか、Torqueか、iBatisか、JDBC直を
検討しているんだけど、どれがいいの?

個人的には
通常:Hibernate
バッチ、複雑なSQL:JDBC直

かなあ

466 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 23:17:23 ]
>>464
バッチには向いてないだろうね。

>>465
あなたの見解は正しいと思う。
Torqueは論外。




467 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 23:27:07 ]
>>449
Webアプリなんかじゃ、ふつーに別スレッドに更新されることが、あるんじゃねーの?

468 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 23:47:26 ]
>>467
遅いし、馬鹿だし、救いようがないな

469 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 23:48:32 ]
>>467
あるよね。

470 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 23:49:05 ]
>>465
自分で選べないくらいプロダクトの特性を理解してないなら
どれを選んでも失敗する

471 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 00:14:54 ]
煽ってるだけだから気にすんな

472 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 00:53:17 ]
しかし、なんだ。
バッチ系にもWEB系にも使えるものてのは、ありそうでないもんだな

473 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 01:04:43 ]
万能ってのは無いよ。数あるフレームワークを適材適所で使うのが現実的。

474 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 05:12:40 ]
うちでは、勉強するってモチベーションが低いのか、ちっともHibernateや他ORMが受け入れられない。
複雑なクエリ文を、しこしか書いている人たちに、HQL使えって言うのは厳しいし、
無理して使ってもらうこともないんだけど。

Hibernate最高って人は、
(実行パフォーマンスに目をつぶっても)開発側が楽だから?
それとも、(開発は多少面倒になるが)実行時に効果的だから?
もしくは、その両方?

475 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 07:38:32 ]
今からHibernateのAPIやHQLを覚える必要はほとんど無い。
JPA/JPQLを使えよ。

476 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 15:30:26 ]
開発効率も品質もそれなりの前提知識・意欲を持つ人が集まることで
ある程度保障されるものだし、何とも言えないんじゃ。

ただ、コンパクトなJDBCラッパだけで色々な案件を
問題無く捌けてりゃ、それはそれでハッピーだとは思う。



477 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 19:30:17 ]
>>474
実行パフォーマンスについては、上手く作ればWebアプリ等では逆に早くなることもある。
開発に関しては、たしかに覚えることは多いが、
リスナーを使ってDBのトリガーみたいな処理をプログラムを使って書けたりとか、
あとは特に排他制御実装が非常に簡単になるのが嬉しい
SQLも使えるから、難しいところは無理にHQL使わずに積極的にSQL使えばいいし
(FROM句への副問い合わせやUNION以外はだいたいHQLで書けるけど)

478 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 19:36:19 ]
たとえば、よくあるWebアプリの一覧検索から1件選んで更新処理とかする画面だと
一覧を取ってくる所は複雑な問い合わせ文になることが多いから
SQLをORMに投げて結果をBeanのListで受け取る。
1件選ぶ処理では主キーを渡してORMでEntityを受け取る。
そこから先はORMの機能だけで関連Entityを取って来たり、
排他制御しつつ更新処理とか全部やってくれる。

479 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 20:09:47 ]
排他制御ってSpringやSeasarといったDIコンテナに
任せるものと違うの?

480 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 22:28:55 ]
SpringやSeasarがテーブルのバージョンカラム定義や、
更新時の自動バージョンカラムチェックとかやってくれるのか?w

481 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 22:37:53 ]
トランザクションかとおもたw

482 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 00:30:31 ]
比較的S2DAOが、バッチもオンラインも対応しやすい。
Seasarのリスクを受容出来るなら、S2DAOと必要に応じてストアドあたりが、
いい感じだな。


483 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 10:24:17 ]
ibatisにsqlをフォーマットするクラスはありますか?

484 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 17:20:38 ]
プリペアードステートメントの「?」にサブクエリーなどのSQLを書いても
SQLではなく短に文字列として処理されるのでしょうか?
さらにibatisは$xx$はプリペアードステートメントの「?」で、#xx#はSQLとして展開ですよね?

485 名前:デフォルトの名無しさん mailto:sage [2006/11/11(土) 21:23:42 ]
hibernate 3.2
hibernate annotation 3.2
hibernate tool 3.2
Eclipse 3.2

な環境でPOJO(アノテーション付き)からその他もろもろを生成したい。


486 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 08:41:06 ]
>>485
今普通にそれでやってる。その他もろもろってDDLくらいしかなくね?
とりあえずHibernateのサイト見ればできるようになんだろ。



487 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 08:46:53 ]
そういやDdlUtilsってアプリ組み込みDB初期化に便利そうなんで
早くリリースされないかなぁ。

488 名前:デフォルトの名無しさん mailto:sage [2006/11/18(土) 13:49:05 ]
sqlを見やすいようにフォーマットしてくれるクラスありますか?
ibatis、dbutils何でもいいのですが・・

489 名前:デフォルトの名無しさん mailto:sage [2006/11/19(日) 11:55:54 ]
一口に見易いと言っても好みがモロに出る所だと思うが、
とりあえずカンマの前後で改行入れる程度のものなら
自分ででっち上げる方が早い気もする。

490 名前:デフォルトの名無しさん mailto:sage [2006/11/19(日) 14:14:39 ]
そういうツールはいくらでもあるじゃん。

491 名前:デフォルトの名無しさん [2006/11/20(月) 04:29:31 ]
MySQLにテーブルをいくつか作って、
Hibernate Toolsを使って.hbm.xmlと.javaを自動生成させた。

one-to-oneになって欲しい部分がone-to-manyになっている。

困った。


492 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 10:00:20 ]
>>490
すいません。ツールは知っているのですが、管理者からPG側から整形済みをログで吐き出せといわれていまして・・・

493 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 10:16:39 ]
管理者ならログ整形するツールくらい用意しろよと言い返せ。

494 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 18:45:26 ]
Hibernateなら整形出力あるんだけどね

495 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 18:57:18 ]
>>492
その自称管理者がクソ

496 名前:デフォルトの名無しさん [2006/11/27(月) 01:29:48 ]
WebアプリでHibernateを使うとき、updateて普通どうやるんですか?
マニュアルとか見ると、一般的なやり方として
load -> データ変更 -> update
しかないみたいなんですがWebアプリだとloadとupdateの間に
画面遷移が入るのが普通ですよね.

・最初にloadしたデータをセッションにでも入れておく
・updateのときにもういっかいloadする
・loadはせず、自分でオブジェクトを生成してidや全てのプロパティを手動で設定

どんなふうにやるもんなのでしょうか.



497 名前:デフォルトの名無しさん mailto:sage [2006/11/27(月) 01:33:40 ]
・最初にloadしたデータをセッションにでも入れておく
の後、データを再度トランザクションにくくりつける。
・updateのときにもういっかいloadする
は、勝手にやってくれる。

498 名前:デフォルトの名無しさん mailto:sage [2006/11/27(月) 01:38:35 ]
>>496
前の画面で取得したEntityをsessionなどに保持しておいて
Session(Hibernate Core)使うならupdate
EntityManager(Hibernate EntityManager)使うならmerge

手動で再loadとかすると、排他制御をHibernateに任せられなくなるので
お勧めできない

ちなみに、同一トランザクション上なら、取得したEntityは
値を変えるだけでUPDATEされるので、updateメソッド使う必要はない
ここを間違ってupdateメソッド使うかのように書いてる本が多いので、騙されないように

499 名前:496 [2006/11/27(月) 03:00:40 ]
ありがとうございます.
セッション管理がいやなので更新時再loadでやろうと思ってました...

ブラウザのウインドウをいくつも開いて同時に編集というのを
許可する場合はどうするんでしょうか?
entityの種類とidごとに別のキーでセッションに入れたりして、
セッション内に作業中entityをどんどん保存/updateしていく
という感じになるんでしょうか.


500 名前:デフォルトの名無しさん mailto:sage [2006/11/27(月) 06:50:21 ]
ログを常時監視してる場合も有るから、人間が直接読めるってのは重要な場合も有るかと。

まあ要求するのは良いが、それならおまいが管理までやれって返されるだけだよ(w
やぶ蛇にならないようにガンガレ。

501 名前:デフォルトの名無しさん mailto:sage [2006/11/27(月) 09:13:01 ]
ログを監視する場合はむしろSQLを整形して吐かれるのは嫌だと思うんだけどなぁ。
ログは、基本一行で全部出して欲しい派。

正規表現で取り出しやすくなるし。

502 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 02:35:47 ]
いつの間にか、Dbutils1.1が出てますね。

503 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 02:23:14 ]
Java6のJDBC4.0使った簡易O/Rマッピングってどんな感じですかね?

504 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 02:38:46 ]
系統的にはiBatisみたいだね。
www.onjava.com/pub/a/onjava/2006/08/02/jjdbc-4-enhancements-in-java-se-6.html

505 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 22:45:10 ]
>>498
いつも思うんだけど、Hibernateで排他制御を任せると、
複数サーバでの運用って事実上無理にならない?

JavaVM1つでしか動きを保障できないようなフレームワークが
なぜこんなに流行るのかわからない。

506 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 22:58:32 ]
複数サーバの並列運用が必要な案件がそんなにないからじゃないかと。
大規模案件はやっぱりEJBの出番なんでしょう。



507 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 23:18:00 ]
>>505
普通にHibernate経由でDBロック取ればいいじゃん。
API提供されてるし。

>>506
なんでEJB?


508 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 23:24:00 ]
分散を最初から考慮しているってのは確かに大きいな。

509 名前:507 mailto:sage [2006/12/07(木) 23:33:33 ]
>>506
ちょっと喧嘩売ってるみたいな書き方になった…

補足すると、そもそも並列稼動の実装ってかなり設計に依存するから
安易に大規模案件=EJBを持ち出す意味がわかんないって話。

単純なスケールアウトの話で、VMをまたいだキャッシュの同期を
意図してたならHibernateでもいくつかサポートしてるキャッシュ実装があるよ。
※Coherenceとか

ま、JBossのEJBって話だったら別に変わんないか。


510 名前:デフォルトの名無しさん mailto:sage [2006/12/08(金) 00:27:16 ]
>>505
Hibernateの排他制御は基本的に楽観的排他で、
UPDATE文発行するときに、検索条件に主キー+バージョンカラムの値をつけ、
UPDATEの結果が0だったら排他エラーにするものだよ
同期を取っているのはあくまでもDBで、JVMは関係ないと思うけど

2次キャッシュに対する更新は、たしかに複数サーバでの運用が問題になるが
そんなときはクラスタ対応のJBoss TreeCacheを使えばいい

511 名前:デフォルトの名無しさん mailto:sage [2006/12/08(金) 01:02:00 ]
>>510
へー、そうなのか。勉強になった。
どちらにせよ、最近は状態を頑張って各ノードで通信して同期するより、
なるべく状態非依存にしてスケールアップする方向に進んでるから、
Hibernateの挙動はあまりいくないと思う。

512 名前:デフォルトの名無しさん mailto:sage [2006/12/08(金) 01:33:17 ]
>>511
参考までに聞きたいのだが、状態を持たない場合、複数画面の排他制御ってどうやってやるのが普通なの?
主キー+バージョン値だけを保持して、バージョン値も条件に入れて再SELECTとか?
ただこの場合、関連するEntityを同時に再SELECTする場合、全部のバージョン値を保持しなきゃいけなくなるよね
自分もHibernate使っていたとき迷ったのだが、結局HttpSessionに保持してmerge以外に良い方法を思いつかなかった

513 名前:デフォルトの名無しさん mailto:sage [2006/12/08(金) 02:15:47 ]
>>511
Hibernateの挙動というよりは、単に2次キャッシュを使わなければ良いだけでは?
OptimisticLockも2次キャッシュ同様にデフォルトでは有効でないから
そこに文句をつけるのは違うと思う。

> どちらにせよ、最近は状態を頑張って各ノードで通信して同期するより、
> なるべく状態非依存にしてスケールアップする方向に進んでるから、

これ、そうなの?クラスタ系プロダクトの信頼度が上がってくるのはこれからじゃないのかな。
あと、下のケースはスケールアウトと間違えてない?


514 名前:デフォルトの名無しさん mailto:sage [2006/12/12(火) 18:52:08 ]
ibatisでカスタムタグを作ることってできますか?

515 名前:デフォルトの名無しさん mailto:sage [2006/12/13(水) 23:35:57 ]
>>514
OpenSessionInViewパターン的な仕組みとやりとりするカスタムタグを
作るってことなら、そんなに悩まずできるんじゃないの?
iBatisだろうとHibernateだろうと生Jdbcだろうと。

おれなら半日で作るね。



516 名前:デフォルトの名無しさん mailto:sage [2006/12/13(水) 23:44:54 ]
半日もかかるのか。イラネ。



517 名前:デフォルトの名無しさん mailto:sage [2006/12/14(木) 00:06:28 ]
タグ作って、テストして、プロジェクトの他メンバーに仕様を伝えるためのドキュメント作って・・・
としていたら半日なんてあっという間。

518 名前:デフォルトの名無しさん mailto:sage [2006/12/14(木) 01:45:16 ]
ibatisの設定ファイルに書くタグのことじゃね?

519 名前:デフォルトの名無しさん mailto:sage [2006/12/15(金) 11:03:54 ]
gcの対象って、インスタンスだけじゃなくてクラスも対象なんですか?
クラスに定義してあるメソッドの実行コードもメモリから消えちゃう?

Cをやっていたとき、実行コードはメモリのtextにロードされるから、
textエリアは書込み禁止なはずなので・・・、javaでは実行コードはtextに書かないのかな


520 名前:デフォルトの名無しさん mailto:sage [2006/12/15(金) 12:26:48 ]
>>519
スレ違いなので簡単に。詳細は別スレで語って。
ttp://www.nminoru.jp/~nminoru/java/class_unloading.html

521 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 01:54:12 ]
JBOSSなんて実運用で使ったら軽く死ねるよ。
コストかけても商用のEJBフレームワークを採用した方が、ロードバランサも不要で安くつく。

syslogやsnmpで監視しても、最後はopenviewのSQL DBに突っ込んでるしねえ。
加工することを考えると、SQL DBにログを突っ込むのは悪くはない。
syslogのテキスト処理しか出来ないperl廚が困るだけでしょ。DBIぐらい覚えろよと。

522 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 02:10:02 ]
GlassFishでいいんじゃね?

523 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 04:50:43 ]
>>521
知ったかぶり乙。

524 名前:デフォルトの名無しさん mailto:sage [2006/12/23(土) 08:45:01 ]
ほんとに意味不明だなw
ある種の才能。

525 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 12:20:52 ]
HOS

526 名前:デフォルトの名無しさん [2007/01/17(水) 22:43:07 ]
取得する列を可変にしたいのですが、iBatisではどうやればいいですか



527 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 00:00:12 ]
DBの型とJavaの型マップのデフォルト値を取得する方法ないでしょうか?
java.sql.Connection#setTypeMap で型マップの上書きができるのは、分かったのですが・・・。


528 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 02:01:48 ]
フレームワークとは直接関係ないんだけど、良いDAOの作り方というのが
いまいちわからん。
検索条件が複雑なユースケースがたくさんの場合、メソッドの引数やDTO
だとすげー煩わしくなってくるんだけど、みんなはどう対応してる?

529 名前:デフォルトの名無しさん [2007/01/18(木) 23:59:20 ]
>>528

検索はほぼDTOですね。。
あとで変更があっても影響範囲極小にできるから

530 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 01:26:04 ]
DTO でもめんどいと、もう Map しかないよね。

うぇーって感じだけど、DTO 書きが面倒というような規模
(ビューからDAOまで自分一人とか)なら、Map は割と現実的な
解だと思ってる。

531 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 01:29:16 ]
SELECT文からDTOを児童生成するようなフレームワークって無いのかな?
Velocityとjava.sql.ResultSetMetaData使えば結構簡単に作れそうな気がするけど。
一時期作ってたけど、
同僚のマの人がせっせこ作ってくれるんで途中で投げた。

532 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 01:58:10 ]
Hibernate以外でDAOでオブジェクトを生成するとき、みんなどこまでの階層を読み込んでる?
基準とかあるのか?

533 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 02:01:17 ]
あるあるww

534 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 12:18:29 ]
Mapが面倒ならRowSet使うのがいいと思われ

JPAとかこれから普及すると思うが、テーブル単位で扱うのが常識なのだろう
RDBに慣れた人ならjoinつかって重複するデータ部分も生成してすべてOneToOneでつなげれば今までと同じように使えるし
既存コードからの変更はわりと容易

535 名前:デフォルトの名無しさん [2007/01/19(金) 19:14:25 ]
もれのORマッピングに関しての認識がどうも間違ってるみたいなので教えてください。

ORマッピングフレームワークにはHibernateやToplinkなどが一昔前からあり、
最近JPAというものが登場し、JAVAEE5、SE6にも取り込まれている。JPAはEJB3.0でも使用されている。
JPAはコアの部分にtoplinkを使っていてtoplinkエッセンシャルと呼ばれる?
なんかよく分かんないのですがあってます?

536 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 20:00:39 ]
あってない
まずJPAはEJB3.0の中のひとつ
ただし、JavaSEでも使えるように独立している

toplinkはJPAの実装のうちのひとつででリファレンス実装となっている
サーブレットコンテナのリファレンス実装だったTomcatと同じような位置づけ



537 名前:535 [2007/01/19(金) 20:32:39 ]
>>536
ありがとうございます。
なんとなく理解できました。
EJB3.0の中にいたJPAは独立可能なのでSEにも加えられて、
toplinkとJPAの関係は Myfacesとjsfみたいなもんというわけですね。
めもめも

538 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 21:13:28 ]
JavaSE6にJPAは取り込まれてない

539 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 23:56:48 ]
すみませぬ。質問させてください。
取り出したレコードがコード値(性別とか)を保持している場合、0 -> 男性 などのマッピングはいつ行えばいいのでしょうか。
あとDTOにコード値とマッピング後の文字列、両方を保持するのが一般的なのでしょうか。

540 名前:デフォルトの名無しさん mailto:sage [2007/01/20(土) 00:03:15 ]
そのへんは突き詰めるとSEXSテーブルを作ってSexオブジェクトを作って…。みたいになりそうだ。
enumうまく使えたら良いのかな?

541 名前:デフォルトの名無しさん [2007/01/20(土) 01:15:37 ]
>>539

DTOにマッピングの文字列を取得するメソッド作成するかな。。
確かにこういうの迷いますよね。。

542 名前:539 mailto:sage [2007/01/20(土) 11:34:33 ]
SQLで結合してしまえばいいともおもうのですが(iBatis使ってるんで)顧客とかって結構コード値で管理してるデータが多いじゃないですか。
SQLのFromにだらだらと並べるのも嫌だし。。。
今のところマスタ系のデータはグローバル領域で保持して、View(jsp)でマッピングするという流れになっています。

543 名前:328 mailto:sage [2007/01/21(日) 02:02:35 ]
マッピングはviewじゃないかな?

544 名前:デフォルトの名無しさん [2007/01/21(日) 21:32:58 ]
viewかー

545 名前:某スレ167 [2007/01/22(月) 01:48:20 ]
んと、今まではシコシコと自作でDAO書いてたのですが、DI×AOPの導入と一緒にフツーのORMも勉強してみようと思い立ちました。

HibernateはどーしてもあのHQLとXDocletが好きになれず、Seasar2+S2Daoをしばらくいじってみましたが、Spring Remotingにかなりクラっと来て、他のORMももう少し深く調べてみようと思いました。
PHPな人でもあるので、両方で(ある程度)知識を共用できるORMということでS2Daoとblanco、DI×AOPするならS2Daoという筋道で選択しましたが、Hibernateにコストをかけるべきかで少々迷っていますが、どんなモンでしょう?

今のこころは、とりあえずはDbUtilsやSpringJDBCを手早く身に付けておいて、続きはJPAというふうにしたほうがいいかな?、と思っています。
今日買ってきた「Spring2.0入門」を読んだ限りでは、ActiveRowMapperが正式リリースされればSpringJDBCはかなり使い勝手がよいという印象を持ちました。

自分でいくつかDAOを書いた限りでは、結局1:Nマッピングや複雑なビューの生成は自分で書くしかない、って思ってしまうんですよねぇ。
設計がまずいだけかもしれませんが、結局はそのあたりもビジネスロジックとは完全には無縁ではいられないのだから、1テーブル/1レコードをそのまま扱うDAO/DTOを基底クラスとして作って、
テーブル同士の関連は(ある程度のビジネスロジック込みで)ファサードとして纏める、なんてことをしてしまっています。
もっとも、これはあまり深くまで勉強せず、かじったどころか舐めた程度でしかない者の浅はかな感想かもしれませんが……。

追伸
それでもSeasar2の自動コンポーネント登録/自動アスペクト登録にはまだ魅力を感じています。ありゃ便利です。
人はこうやってSeasarの重力に魂を引かれていくのか……(苦笑)
ま、これは本当の余談ですけどね(^^;

546 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 02:07:54 ]
S2/S2DAOはいいと思うよ。
Hibernateを今から覚えるぐらいなら、JPAを覚えて、
HibernateはJPA実装として使うという位置づけでいいんじゃないか?



547 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 18:59:48 ]
>>545
Hibernate使ってる身としては、もう1:Nマッピングとかを自分で書く気にはなれないな
DBの定義に関する情報は、フレームワークがスキーマ読み込んでクラスまで自動作成すべき
たしかにHibernateの学習コストの高さはネックだけど、
JPAが出たおかげで、マッピング周りはかなり簡単になったと感じてる

548 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 10:01:15 ]


549 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 16:37:27 ]
え?

550 名前:デフォルトの名無しさん [2007/02/19(月) 22:28:19 ]
iBatis
abatorConfigでsqlMapを自動生成するとかなりいろんな条件いれてくれたり、XXXExampleとか作られるのがうざいんだけどなんとかならない?

551 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 13:02:37 ]
Hibernate...
いちいち関連を定義しないと外部結合できないのはなんとかならんのか。


552 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 14:48:47 ]
>>551
それがあるから、Entityに関連書きまくることになるんだよなぁ

553 名前:デフォルトの名無しさん [2007/02/25(日) 01:51:51 ]
>> SELECT文からDTOを児童生成するようなフレームワークって無いのかな?

DBFluteとDolteng はSQLからS2Dao用のDTOを生成してくれるよ

554 名前:デフォルトの名無しさん [2007/02/25(日) 12:14:08 ]
>>553
そりゃあもちろん、SELECT文はDTOを出産しない>児童生成

555 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 10:36:09 ]
認知してよ!

556 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 12:29:29 ]
>>551
SQLを意識するならHibernateを使わないほうが良いと思われる

むしろXMLで定義するだけでオブジェクト間関連を永続化してくれるのはありがたいと思え



557 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 15:47:06 ]
Hibernate は先にオブジェクトがあって、
永続層がたまたまRDBでしたって感じで使わないと
無駄に時間かかるだけだな・・

何故俺の行く先はロクに正規化もされてない神聖不可侵な
クソスキーマがアプリオリに存在してるのばかりなのはなんでなんだぜ。

558 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 15:53:29 ]
>>557
っ「転職」

559 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 23:38:39 ]
>>558
たぶん、>>557の転職先でも、同じようなDB設計になるはずw
つまり、それは運命www

560 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 23:43:16 ]
>>556
外部結合と、SQLを意識するしないは関係ないよ。
(SQL特有のものだったら、そもそもHQLにouter joinなんて単語は出ない)
単に機能が不完全なだけ。実装が面倒だったんだろ。
内部結合は関連なくてもできるしね。


561 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 01:21:12 ]
HQLでのouter joinとかって苦肉の策だと思うのは俺だけか?
普通なら結合条件つけなくていいと思うんだが・・

562 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 02:44:43 ]
>>561
FETCH JOINで使ったり、SELECT new ...()で外部結合テーブルのカラムを含めるときに
普通に使ってるが、なぜつけなくていいと思ったの?

563 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 22:16:10 ]
>>562
お前、全然オブジェクトで考えられてないのなwww

564 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 00:19:50 ]
>>563
考えられてないでいいけど、なぜつけなくていいと思ったの?

565 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 00:35:19 ]
>>564
オブジェクト中心に考えてるとつけなくていいから

566 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 00:36:28 ]
>>564
HibernateってORマッピングフレームワークだぞ。
Object-RDBだぞ。
Object中心に考えないとおかしい使い方になる



567 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 01:08:45 ]
FETCH JOINは通常パフォチューで使うもので、オブジェクト中心とか関係ない
N+1セレクト問題を避けるため、関連を全てLAZYで定義して
HQLのFETCH JOINを使うのがHibernateの常套手段
また、レポートクエリをEntityのみで無理矢理行うのは馬鹿げている
HQLならSELECT new、またはSQLQueryで普通にSQL発行すればいい
全てをEntity中心に行うのは無理で無駄。
Entityは排他制御+登録・更新処理で威力を発揮する。
レポート機能はSQL中心に考える。適材適所で使えばいいんだよ

568 名前:デフォルトの名無しさん [2007/03/01(木) 11:58:30 ]
>567
俺ならレポート部分はJDBC使う

569 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 11:59:41 ]
> N+1セレクト問題を避けるため、関連を全てLAZYで定義して
> HQLのFETCH JOINを使うのがHibernateの常套手段
どこかに資料ありますか?

570 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 15:08:26 ]
>>569
Hibernate in Action

571 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 21:21:24 ]
そういやiBatis in Actionの訳本出ないかな〜

572 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 22:31:13 ]
レポートとか統計取るときにオブジェクトで考えてもおかしくなるだけだもんな。

そーゆー時には統計に優れれた言語であるSQLを使うのがやっぱり正しい。

573 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 09:18:32 ]
RDB-Objectマッピングフレームワークの方がよくね?

574 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 12:31:06 ]
つまりJava以外の話をしたいってこと?

575 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 13:11:16 ]
O/R でなく R/O になってるところがポイントじゃね?
Object の永続層に RDB 使うためのマッピングフレームワークではなく、
RDB が先にあって、プログラミング言語から簡単に使うためのフレームワークなのでは。

576 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 13:45:57 ]
DBを最初に考えて使いやすいものを
となるならJDBCRowSet使えばいいじゃない



577 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 15:25:12 ]
データ構造はRDBのER図+正規化で決定するけど、プログラムはオブジェクト指向でやりたいのよ

578 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 15:52:08 ]
なら普通にJPAでいいだろ

579 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 15:59:26 ]
JPAはObjectありきじゃね?

580 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 16:35:48 ]
俺もRowSetにいっぴょ。

データをハンドリングする部分がオブジェクト指向で書ければ、
データそのものは生っぽくてもいいよ。


581 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 16:47:55 ]
>>579
先にDBを定義しておいても使えるし、先にクラスを定義しておいても使える
どっちがメインかなんて意味なさ杉

582 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 17:09:31 ]
おれはオブジェクト図を先に作るほうだけど、
ER図でどうなるかとか、SQLで結合しやすいかなどは考えながらやってるよ。
そういう意味じゃO-R-Oマッピングくらいか。

HQLやEJQLを使えば何でもできるというのはなんか違う気がする。
こいつは必要悪とは言わないがある種の妥協なんだと思う。

583 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 23:07:58 ]
iBatis
テーブルごとにsqlMapを分けてるんだけど、
呼び出し側でnamespace意識して呼び出すことってできないの?


584 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 01:24:38 ]
RDB使う時点で、性能やコーディングやりやすさはRDBの方に制約が大きいから、RDBの比重を大きくしたほうがしたほうがいいと思う。

585 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 01:06:34 ]
こんな過疎スレがあったとは・・・・・・

586 名前:デフォルトの名無しさん [2007/04/12(木) 19:09:54 ]
hibernateなんだけど、one2many to many なテーブルをone2manyなBeanにする方法ってありますか?
具体例を挙げると、ショップとカタログと商品のテーブルがあるとすると
カタログテーブルはショップIDと商品IDのユニークな組み合わせを持ってて、他にカラムは無い状態。

実際はあるオブジェクトに対してカスタム属性を付加するアプリなんだけどね。



587 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 01:36:02 ]
>>586

Chapter7.Association Mappings
www.hibernate.org/hib_docs/v3/reference/en/html/associations.html#assoc-bidirectional-join

試してなくて申し訳ないんだけど、ここに書いてある「join table」使ったマッピングじゃだめ?

588 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 00:43:39 ]
586って、いわゆる many-to-many だと思うんだけど、違うの?

589 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 02:15:57 ]
どう見てもただの many-to-many です。

590 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 19:00:53 ]
カタログがリンクテーブルっぽいけど、商品から見たショップは1だろうからmany-to-manyではないんじゃないの?
よくわかんないけど。

591 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 19:17:24 ]
>>586は「one2many to many 」って言ってるじゃないか
それがなんだかわからんが

592 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 19:49:12 ]
カタログテーブルの商品IDがユニークなんだろ

593 名前:586 mailto:sage [2007/04/17(火) 18:45:14 ]
ただのmany-to-manyのようでした。
カタログテーブルにあたるビーンを作ってしまったのが混乱の元のようで。

594 名前:デフォルトの名無しさん [2007/05/10(木) 00:19:39 ]
とっぷりんくあげ

595 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 18:25:45 ]
データベースのコード値ってプログラムではどういうふうに管理してますか?
定数だけを集めるクラスを作ったり、列ごとの列挙型のクラス作ったりするのが普通なのですか?

596 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 18:34:07 ]
ご自由に



597 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 20:46:11 ]
・直値(マジックナンバー)
・const値
・enum挙
・ステートパターン
選択肢ってこれくらい?

598 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 23:25:41 ]
エンティティクラスで const 定義してる。
基本的に、対応するカラムの型にあわせたconstを用意。

599 名前:デフォルトの名無しさん mailto:sage [2007/06/23(土) 23:35:58 ]
ステートパターンが使えるとこでは使うのが自然かな

600 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 08:30:24 ]
エンティティでカプセル化でしょうな

601 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 14:02:08 ]
>>597
揚げ足とりでスマンけど、直値って言うか?
immediateは即値じゃね?

602 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 23:53:07 ]
回答いただきありがとうございます。
エンティティクラスとステートパターンがわからないので出直します。

603 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 10:15:30 ]
aaaaa

604 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 10:49:14 ]
各DBのテーブル定義などを取得するための共通IFをもったライブラリってありますか?

605 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 12:15:09 ]
>>604
JDBC

606 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 14:25:25 ]
>>605
例えばgetTableInfo()みたいなものがあって、使用者側はどのベンダー化を意識しなくてもいいってこと?



607 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 14:36:27 ]
ある程度意識しないとダメだがな

608 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 14:52:45 ]
>>607
ありました
DatabaseMetaDataのgetColumns、getTables

609 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 23:33:47 ]
activerecord

610 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 23:34:40 ]
hibernate

611 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 18:48:27 ]
sql分を解析するライブラリって知ってます?

612 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 00:52:22 ]
>>611
JavaCCとかAntlrとか

613 名前:デフォルトの名無しさん [2007/07/23(月) 20:03:22 ]
すみませんが、教えてください。

例えばhibernateで、1対多の関係のあるテーブルをone-to-manyで関連付けた場合、
「1」側のデータを取得した際に「多」側の関連するデータのインスタンスを
すべて作成してしまうんですよね?1万件のデータであっても。

最初の10件・・のような、ページに分けて表示するようなWEBアプリの場合、
最初の10件分のインスタンスだけが取得できればいいと思っているのですが
多側のインスタンス数のコントロールとかできるのでしょうか?

もしくは、みなさんこんな場合にはどのようにしているのか教えていただけると嬉しいです。

よろしくお願いします。

614 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 21:00:10 ]
>>613
取得することも出来るし、しないこともできる

JPAでもそうだよ
基本はLAZYだろうね

615 名前:デフォルトの名無しさん [2007/07/24(火) 12:49:13 ]
>>614
ありがとう。
> しないこともできる
っていうのはどういう風にやるのでしょうか?出来たら教えて欲しいです。
次の10件とか、どうやるんだろう?
LAZYにして、必要な分だけloopするとかですか?ん?違うかな。

それと、もう一つ教えてください。
hibernateで、例えばマスターデータの追加ではなく編集の画面で、
入力画面→確認画面→結果画面って流れで、
入力画面から取得した値をhibernateから取り出したエンティティの
プロパティ値に直接書いちゃうと、確認画面を表示するところで、
updateされちゃうじゃないですか。
普通は、このような流れの時には、hibernateから取り出しエンティティの
値をDTOなどにつめ直してセッションとかにぶち込んでおいて、
最後にDTOの値をエンティティに書き戻したりするんでしょうか?
うーん、伝わるかなぁ・・・。
よろしくお願いします。

616 名前:デフォルトの名無しさん mailto:sage [2007/07/24(火) 13:51:11 ]
>>615
標準APIであるJPAの実装では1:nのデフォはLAZY
なにもアクセスしなければ連結先は取得されない

後半の文はおかしくないか?
実装次第だが仮にエンティティにデータを入れたところで勝手にupdateされるか?
WEBアプリなら入力専用にデタッチされたエンティティわたしてもいいし、
入力専用のBeanでわたしてもいい(これが普通)

スタンドアロンアプリなどではトランザクションでコミットしなければそのままだし
コネクションの持ち方と運用次第としか

ループ命令はfor文とwhile文のどちらがいいですか?といってる感じがしてどうもなぁ



617 名前:デフォルトの名無しさん [2007/07/24(火) 14:37:38 ]
>>616
ありがとうございます。
> 標準APIであるJPAの実装では1:nのデフォはLAZY
> なにもアクセスしなければ連結先は取得されない
なにもアクセスしなければ、取得されないのは判るのですが、
ちょっとだけとか、ある範囲(20件目〜30件目など)だけ取得したいのに、
全件取得されちゃうんじゃないかと・・・?違うんですかね?

> 後半の文はおかしくないか?
すんません。
> 実装次第だが仮にエンティティにデータを入れたところで勝手にupdateされるか?
ええ。例えば先の例(WEB)で、
1.エンティティを取得→入力画面にエンティティの情報含めて表示。ユーザーが入力してOKする。
2.おんなじエンティティを再度取得して、入力データでそのエンティティのプロパティを変更してセッションとかに入れる
  →確認画面に編集後のエンティティの情報を表示
3.OKが押されたなら、その編集後のエンティティを取り出して、update

って流れで考えていたのですが、2.の終了段階でflushされて、その時エンティティの状態が変更されているから、
updateしちゃうんですよ。てっきりupdate(entity)メソッドを発行しない限りupdateされないかと思ってたんですけど
・・・って、私が試したのはhibernate2だったんですけど。今は違うのかな?
すみません。

618 名前:デフォルトの名無しさん mailto:sage [2007/07/24(火) 15:06:30 ]
それ、デタッチしないでセッション(=トランザクション)が開いたまま
使ってたんじゃないの?それだと update しなくても、セッションが
終了するときに、自動的に更新されるよ。

セッションって、webじゃなくてhibernateのほうのね。

619 名前:デフォルトの名無しさん mailto:sage [2007/07/24(火) 16:11:49 ]
>>618
ありがとうございます。
そうですね、デタッチしてなかったです。
そもそも、設計自体がよろしくないんですね。きっと。
専用のBeanを使うのがやはり普通なのでしょうかね?

なんとなく、入出力用のBeanを使うと、beanとエンティティとの間でプロパティのコピーを
しなきゃいけなくって、そうするのもわずらわしいと思って、
直接エンティティを操作していたんですけど、←これがわるいんですね。きっと。
勉強になりますた。

どなたか>>617の前半の部分も解決させていただけると助かります。
よろしくお願いします。教えて君ですみません。

620 名前:デフォルトの名無しさん mailto:sage [2007/07/24(火) 18:56:52 ]
UIはUIで割り切ったほうが良いんじゃないのか?

例だけど、エンティティでは電話番号というデータ1つだけど、
UIでは-区切りの入力欄にするとかあるし・・・


621 名前:デフォルトの名無しさん mailto:sage [2007/07/24(火) 22:26:58 ]
一部分だけの検索がほしいってlimitとか条件で絞るって話のことか?
それならEAGERでいいっしょ
まぁLAZYでもその程度問題ないけど、全件取得して処理するのはおかしい

O/Rマッパというのはキャッシングも利用するからSQLが投げられるとも限らないからね
運用すればわかるがLAZYだから遅くなるとは限らない


622 名前:デフォルトの名無しさん mailto:sage [2007/07/24(火) 22:27:52 ]
>>620
フレームワーク次第じゃない?
ハイフン区切りや複数のコンポーネントの結果が1つのフィールドになるようなら何にも問題ないし

623 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 08:28:56 ]
>>619
> ちょっとだけとか、ある範囲(20件目〜30件目など)だけ取得したいのに、
> 全件取得されちゃうんじゃないかと・・・?違うんですかね?

違うよ。LAZY LOADだとforループとかで21-30件目を
DTOなりにコピーするたびに

SELECT ... FROM ... WHERE ID=?

が発行されるだけ。なので計10回クエリーされるけど全件は取得されない。

SQLの効率をよくしたいなら、
JPQLなりHQLなりで必要な範囲だけ一回で取り出しておいて
コピーすればいい。

624 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 08:50:03 ]
なんか、話がOneToManyとManyToOneでずれてる気がする

625 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 08:56:45 ]
そもそもは
Maker m = getSingleResult("select m from Maker m");
ってやって
List<Product> products = m.getProducts();
ってやったときにproductsが1万件あったらどうするの?ってことじゃないの?

626 名前:デフォルトの名無しさん mailto:sage [2007/07/25(水) 23:37:08 ]
select m top 30 from Maker



627 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 00:10:29 ]
>>625
そんなあほな話じゃないだろ・・・




さすがにそう思いたい

628 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 01:37:40 ]
List<Products> products =
 em.createQuery("select p from Products p where p.maker = :maker").
  setParameter("maker", m).setFirstResult(20).setMaxResults(10).getResultList();

629 名前:デフォルトの名無しさん mailto:sage [2007/07/26(木) 01:40:12 ]
SQL書いたほうが早いな

630 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 01:37:22 ]
>>628
OneToManyの意味ね〜

631 名前:デフォルトの名無しさん [2007/07/27(金) 17:23:31 ]
何千行もあるようなSQL書いて悦に入ってる香具師が
まだこの世には存在しているという事実にナッカリ。

632 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 20:19:50 ]
昔の方がSQLの長さに理不尽な制限があったりしたような気がするが

633 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 23:39:38 ]
今だってOracleの場合 VARCHAR 4000 Byte の制限やテーブル名、カラム名の長さ制限には泣かされてるがな。

634 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 23:49:49 ]
H2はLIKEがCLOBにも使えて感動した覚えがある。
たしかOracleって無理だったよね?

635 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 23:56:39 ]
何千行もあるようなSQLを書くような輩が発生する
危険性があるので、O/Rマッパー使いなさいってのは無理がある

636 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 08:33:07 ]
何千行もあるようなSQLがORマッピングで解決できると思ってるやつは、ORマッピングの意味を間違えている。
データベースにやらせてた処理をJava側にやらせるためにあるもんじゃない。



637 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 10:07:04 ]
長いSQLが必要な処理ってのはある

O/RマッパとSQLは排他ってわけじゃないし
それぞれ利点と不利な点がある


638 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 10:54:56 ]
ワイルドカードあるのに実質的に使えないのが癌だな
ついついカラム名を2〜3文字にして
エイリアスも極力短めに(ry

639 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 14:17:05 ]
JPAでは
select count(*) from Employee e
は使えないのでつか?


640 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 14:26:19 ]
select count(e.id) from Employee e
とかじゃないかな

641 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 14:29:38 ]
どうもでつ

642 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 14:37:34 ]
select count(e) from Employee e
でもおk

643 名前:デフォルトの名無しさん mailto:sage [2007/07/28(土) 20:01:35 ]
またまたありがとでつ
そちらの方を使うことにしまつ

644 名前:デフォルトの名無しさん [2007/08/07(火) 22:08:14 ]
Java永続化APIの次期バージョン、"JSR 317"として仕様策定プロセスへ
ttp://journal.mycom.co.jp/news/2007/07/23/039/

既存バージョンからの主な変更点は以下の通り。

・組み込みオブジェクトのコレクションサポート
・組み込みオブジェクトの多段ネストをサポート
・Orderd Listのサポート
・アクセスタイプの組み合わせをサポート
・JPQL(Java Persistence Query Language)の拡張
・Criteriaの導入
・クエリとエンティティマネージャの設定ヒントの標準化
・DDL生成とJava2DBマッピングのための追加メタデータの標準化
・Bean Validation(JSR-303)のサポート

645 名前:デフォルトの名無しさん mailto:sage [2007/08/07(火) 23:56:23 ]
ポイントは
・Orderd Listのサポート
・クエリとエンティティマネージャの設定ヒントの標準化
・Bean Validation(JSR-303)のサポート
あたりかな

気になるのはenumが使いたい場合ってのが結構あることかな

たぶんJPAで一番ほしいのはDBのデフォルト値を有効に出来るような仕様だろうな
開発、運用していて一番これが厳しかったりする

646 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 00:28:41 ]
Criteriaの導入が気になる。

Hibernateの仕様をベースにすんのかな?
あれはSQLと違って条件に応じて結合するテーブルを
動的に変化させるような使い方の場合に便利だと思う。

Hibernateではちょっと実装面がアレだったけど、
JPAだと安定しやすい仕様になってくれるんだろう。



647 名前:デフォルトの名無しさん mailto:sage [2007/08/08(水) 00:42:05 ]
Criteriaが必要になるときってそんなにない

というか、ある程度のことをやろうとしようとするとどうせJPQLを組み立てることになって
Criteriaでまかなえないことも多そうだし

LAZYなどの厳密化がほしいかな
デフォだとめちゃくちゃ検索の連鎖する場合が多すぎる

ただ、鯖だとキャッシングしまくるからパフォーマンスの問題はでないんだけど
クライアントからのアクセスがおわっとる

せっかくSwingとの親和性がよくなりそうなのにC/S無視するのはどうかと
社内アプリならわりとC/Sもシェアあるぜ
まだまだ50%は超えているんじゃないかな

648 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 14:18:04 ]
>というか、ある程度のことをやろうとしようとするとどうせJPQLを組み立てることになって
>Criteriaでまかなえないことも多そうだし
具体的にはどういうケースですか?

649 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 15:49:31 ]
>647の知識はHibernate2で止まってるとみた。

650 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 10:57:08 ]
dblってかなりよさげじゃない?

651 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 09:57:59 ]
>>650
まちがえ、ddlutils

652 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 14:40:24 ]
>>649
激しく同意

653 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 01:57:00 ]
>>649
JPQLってINを上手く扱えるようになったのか・・・

654 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 05:22:41 ]
>JPQLってINを上手く扱えるようになったのか・・・
過去のJPQLがINを上手く扱えなかったような記述だな。
過去のJPQLって?w


655 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 21:32:58 ]
INで配列使えるの?

656 名前:デフォルトの名無しさん mailto:sage [2007/08/17(金) 22:12:54 ]
653がどうして649への安価なのかが理解できない



657 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 00:34:59 ]
>>656
禿げしく同意
全くもって理解不能

658 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 00:52:11 ]
JPAもまともに触ってないやつおおすぎ


659 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 01:40:33 ]
「JPAも」って言うほど評価・実績のあるものではないんだがな。

660 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 03:23:45 ]
JPAも(Hibernateも)まともに触ってないやつおおすぎ

661 名前:デフォルトの名無しさん mailto:sage [2007/08/18(土) 13:25:34 ]
仕事には必要ないでしょ。趣味ならいいけど。

662 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 12:25:58 ]
661が仕事で使ってるものは、おれには仕事に必要ない。趣味ならいいけど。
そういう話か?

663 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 14:56:37 ]
iBatisを使っています。
updateをするときは1回主キーで検索した結果のビーンを渡すが普通でしょうか?
1つのテーブルを更新する個所が複数あって、その都度、updateのバリエーションが増えてきてしまっています。
私はORMを今回はじめて使うのであまり口を出せないのですが、こういうものなのでしょうか?

664 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 15:54:47 ]
>>662
そういう話w

665 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 19:04:38 ]
>>663
普通のO/Rマッパは変更のあった箇所のみupdateを発行する
薄いラッパほどそのままなので把握がしやすいともいうが、チューニングしていくのは面倒かも

666 名前:デフォルトの名無しさん mailto:sage [2007/09/01(土) 15:45:34 ]
ロストアップデートを防ぐような機能ってないですか?



667 名前:デフォルトの名無しさん mailto:sage [2007/09/25(火) 22:32:58 ]
Hibernate3になって、ストアドプロシージャをサポートしたらしいけど
参考サイトとかないですかね?


668 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 00:44:57 ]
>>667
www.hibernate.org/

669 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 00:48:43 ]
>>668
英語読めない

670 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 01:39:42 ]
>>669
www.nova.ne.jp/

671 名前:デフォルトの名無しさん mailto:sage [2007/09/26(水) 01:45:43 ]
>>669
それは、読んでないだけ。

672 名前:デフォルトの名無しさん mailto:sage [2007/09/27(木) 00:48:19 ]
カイエンってどうよ?

673 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 00:59:53 ]
最近、聞かんな。昔はHibernateと争える勢いだったっけ。

674 名前:デフォルトの名無しさん mailto:sage [2007/09/28(金) 07:00:36 ]
JPAに対応したよ

675 名前:デフォルトの名無しさん [2007/10/06(土) 18:11:51 ]
最近Ruby on Railsをすこしやってたんだけど、Railsに相当するものって
Javaで言うとどんなのがあります?

やりたいのは、Railsでやってた、↓をJavaでもやりたい。
Four Days on Rails 4日で作るToDoリスト
rails.to/pages/4daysonrails

676 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 19:05:18 ]
>>675
JRuby on Rails



677 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 00:30:39 ]
>>675
厳密にはJavaじゃないけど、Grailsとか
ttp://grails.codehaus.org/Japanese+Home

678 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 00:48:54 ]
>>675
JSF+Rowsetならすべてポトペタであつかえるオールインワン環境だぞ

問題はRowsetが主流に慣れそうになくてJSF+JPAになりそうだけど

679 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 01:43:18 ]
>>675
Chura

680 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 02:05:28 ]
>675の人気にジェラ

681 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 02:32:45 ]
詳しくないけど、676〜678 は違うだろ。>>679 だな。

682 名前:デフォルトの名無しさん [2007/10/07(日) 06:00:35 ]
>675
RIFE

683 名前:デフォルトの名無しさん [2007/10/07(日) 08:50:59 ]
>>676
JRubyインストールしてみる

>>677
Groovyインストールしてみる

>>678
ポトペタって、マウスでぐりぐりやるとあらできあがり?
わからん

>>679
>churaの基本構成は、Seasar2.4 + Teeda + KuinaDao + S2Hibernate-JPA + S2Dxo + ツール群という形になります
インストール大変そうだから様子見てみる

>>682
RIFEインストールしてみる(他と比べると、ちょっと情報量が少ない?

684 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 11:52:24 ]
>>683
churaのインストールはこれだけだよ。
s2container.seasar.org/2.4/ja/setup.html

俺も最初は面倒くさそうだと思ったんだけど、eclipseプラグイン入れれば揃うみたい。

685 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 23:49:40 ]
なんというヘタレ…
ttp://d.hatena.ne.jp/RC3/20071007/1191760180

686 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 03:45:53 ]
Railsの環境設定なんか、Netbeans6のRuby版いれればDBもWebサーバーも苦労ないのにな。



687 名前:デフォルトの名無しさん [2007/10/08(月) 04:28:59 ]
テーブルと1対1なエンティティクラスとマッピングする利点てなによ?

688 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 08:46:40 ]
>>685
こんなやつ一生無職のほうが業界のためだ

689 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 11:59:00 ]
こんなクズに対してレスしてたのか

690 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 14:31:25 ]
>>685って>>675

691 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 14:56:55 ]
一目瞭然だろ

692 名前:デフォルトの名無しさん [2007/10/08(月) 17:40:10 ]
結論
 標準になった以上、JPA以外の選択肢はありえない

693 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 19:32:17 ]
Cayenneまで対応したことで、ORマッピングフレームワークが全部JPA対応になったから、どれを選んでもJPAには対応している、ってことか?
結論にはならんな。

694 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 20:35:11 ]
Db上のフィールドがJavaのメンバ名として使用できない名称のような場合、
どうやってORmappingしているのですか?

695 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 20:41:11 ]
>>694
完全に一致させる必要ないだろ

696 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 20:48:05 ]
>>694
好きな名前つければいいと思うよ。



697 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 20:48:34 ]
>>694
プロパティとDBのフィールド名は一致させる必要はないぞ

698 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 21:35:58 ]
>>695-697
POJO内のメンバはDB上はこのフィールド、
のようなことはマッピングファイル?か何かに書いておけば
Dbアクセスの時は意識せずに使える、
ORマッピングのツールはどれもそんなモンなんですか?

逆に、それはできないぞ、というモノもあるのでしょうか。

699 名前:デフォルトの名無しさん [2007/10/09(火) 01:09:02 ]
>>698
EJB3.0だとこんな感じになるはず。

# ただ、なるべく一致させておいた方が不幸なことが起きないかも・・・

@Entity(name="ITEM")
public class Item implements Serializable{
private int id = 0;

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="RENBAN",nullable=false)
public int getId(){ return id;}

public void setId(int id){ this.id=id;}

private String title = null;

@Column(name="SHOSEKI_MEI",nullable=false)
public String getTitle(){ return title;}

public void setTitle(String title){ this.title=title;}

700 名前:694 mailto:sage [2007/10/09(火) 01:21:50 ]
試しにCayenneでやってみますた。
作成されたBeanを見ると、
public static final String フィールド名_PROPERTY = "メンバ名";
という定数があって、これを使うようですね。
外部ファイルかアノテーションでやるのかと思ってましたが、
他のフレームワークでもこんなカンジなんでしょうか。

>>699
なるべく一致させたいのはやまやまですが、
ERを変えられるような立場ではないのです。orz

EJB3.0だとアノテーションで指定するのですね。
参考になります、ありがとうございますた。

701 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 13:04:01 ]
JPAはEJB3から独立してSEで使えるから便利だよ
NetBeansだとテーブルから全部自動で作られるし

702 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 20:24:11 ]
>>701
NetBeans以外では自動で作ってくれるツールをしらない?

703 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 21:34:41 ]
プラグインを用意することなくデフォで使えるってのが大きいだけだろ

704 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 01:27:45 ]
>>702
知ってる

705 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 01:31:27 ]
>>701
きしだタソ乙

706 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 06:45:53 ]
>>702
WTP2.0



707 名前:デフォルトの名無しさん [2007/10/12(金) 22:52:01 ]
結論:DAOでOK マッピングイラネ

708 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 23:05:37 ]
DAOでOKって、マッピング使っても使わなくてもDAO使うだろ。

709 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 03:12:15 ]
>>707
ありえないほどバカだな

710 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 08:51:12 ]
DAO内で自分でSQL発行じゃね?

711 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 10:59:52 ]
>>710
その場合でも、手動マッピングはするわけだが

712 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 11:32:35 ]
わかった!>>707はマッピングせずに

M a p を そ の ま ま 使 う ん だ よ !

713 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 13:24:55 ]
ものによってはMapそのままでも悪くないと思うけどな
キー値の取得がプロパティの取得につながるし

ただ、HashMapとかそのままつかうのだけは禁止
キー値が存在しない場合Exceptionをかえすような実装ならOK

714 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 17:00:59 ]
まーた、Map厨発生か。
が、キー値なしで例外は納得した。

715 名前:デフォルトの名無しさん mailto:sage [2007/10/15(月) 15:09:20 ]
実は Microfost Data Access Objects のことなのかも知れん。

716 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 12:47:53 ]
ResultSetだってRowSetだってmapベースだろ
DelphiだってBCBだってスクリプト系だって



717 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 14:05:52 ]
こいつは何をいっているんだ?

718 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 14:19:27 ]
はじめから道具ありきで、どっかで道に迷っちゃうんだろ
若い奴らは大変なんだよきっと

719 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 14:28:44 ]
Map系ってのはMapインターフェースを実装したものではなくて
名前で値を引っ張るものってことだろ。
何もおかしいことはない。

720 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 14:42:06 ]
どうしてわざわざオブジェクトに情報を詰めなおすのか
知っているか?

721 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 14:42:10 ]
以前、このスレだか過去スレだかに、Map、Mapと騒ぐ奴がいたのな。
その流れを汲んでの話なんだよ。

自分で間違ったことを言っていないつもりなのだろうけど、
このずっと前からのスレの流れ的には空気読めてないんだよ。
しばらくROMってろ。

722 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 14:52:41 ]
>>720
JavaがLightWeightじゃないから

723 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 17:47:29 ]
>>721
それは知っているが、そんな昔の狂ったやつなんてもう今はいないだろう

Mapのように名前を使ってアクセスする場合何が問題だったのかだけがわかって使っていればおけ

VCLのようにラッパクラスをそのまま入れないこと、存在しないキーに対して
取得しようとしたときに例外を発生させることがきまっていれば問題はない

724 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 17:52:59 ]
>>719
おまえの頭がおかしいということはわかった。

725 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 18:07:58 ]
"存在しないキーに対して取得しようとしたときに例外を発生させる"
これが必要なのはなんで?
と思ったが、nullが戻ってきたんじゃデータが無いのか項目自体がないのかが判別できないのか
それ以外の理由もある?

726 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 18:48:26 ]
そもそもDBにnull入れないほうがよくない?



727 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 21:53:40 ]
そうか?

728 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 22:33:48 ]
NULLが無いほうが楽ではあるかもな色々と
ただ、Oracleのような、空文字列がNULLであるようなDBMSではNULLを
避けようが無いだろう

729 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 22:41:00 ]
NullはDBに必要だろ

730 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 22:42:28 ]
(商用で)一番普及してしまっているOracleの仕様にはモニョるものがある罠・・・。

ただnullはアレで便利な面もあるので、ここらは宗教論だろう。

731 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 01:04:31 ]
DBにNULLが全くいらないってのが
どんな状況かわからん。

732 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 02:44:06 ]
Mapを使う時点で、静的型言語の利点を失っている気がする。
だったら、RoRのActiveRecordのほうがよっぽど使いやすい。

733 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 09:26:04 ]
HOGE <> 1 な条件で、HOGE が NULL なレコードが取得できないのが
直感的じゃないと思うので、検索列には NULL は勘弁して欲しいところだ。

734 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 11:59:11 ]
>>733
nullがほしいならnullもor条件いれればいいじゃない

直感的ではないというのは同意だが、SQLにとってnullは特別な値だから仕方がないか

735 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 12:11:08 ]
検索の際の特別扱いだけでなく、
NULLありのカラムはインデクス張る際にも実装上の制約があったりするし、
単純にホスト言語のデータ型とマッピングする際にもやや面倒が生じるので、
少なくとも意味のあるデフォルト値が考えられるようなエンティティなら、
NULLの代わりにデフォ値突っ込んだほうが楽は楽な気がする。

ま、常にそうできるというわけでもないが。

736 名前:デフォルトの名無しさん mailto:sage ネタだよ [2007/10/17(水) 12:23:44 ]
むしろプログラム言語で3値論理をきれいに扱えないのがおかしい



737 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 13:08:35 ]
C#のnullは3値論理だ

738 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 13:09:54 ]
Javaなら3値普通に扱えるだろ・・・

739 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 15:11:51 ]
C.J.Dateたんは第五正規形まで正規化すればnullなんていらんだろ派だね。


740 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 11:31:41 ]
>>733
条件を () で括って最後に is true

741 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 11:43:49 ]
Daoは1テーブルごとに1クラス作成して、CRUDのメソッドがあるのが普通なのでしょうか。
1:nのテーブルがあって、一覧を表示する詳細な検索画面などでどうしても結合が必要な場合や条件が複雑になる場合は
その画面専用?のメソッドを作成するものなのでしょうか。

742 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 16:28:16 ]
というか、それはORマッパがやるだろ。

743 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 17:46:11 ]
テーブル単位でCRUDってのは大概O/Rマッパがやってくれる
連結は製品次第

DBのようにテーブル状に結果が入るほうがいい場合もあるし
そのつど連結先を取ってくるほうがいい場合もあるしなんとも

744 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 18:06:18 ]
DAOやORマッパは手段なのに、
目的の方を「どうするのが普通でしょうか?」って
おかしくね?

745 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 18:34:43 ]
そういうヤツは、O/Rマッパの仕様に合わせてテーブル設計とかしそうで怖いよな。
COBOLerお得意の横長DBとか。

まあ、漏れは直でSQLゴリゴリ出来る人なので、条件・結合が複雑だったら
SQLを直書きではあるな。

746 名前:デフォルトの名無しさん [2007/10/21(日) 21:12:53 ]
テーブル単位でCRUDするだけがORマッパーの役割と思ってる奴多くね?



747 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 21:14:14 ]
少ないと思う

748 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 21:39:36 ]
>>539
って結局JSPで、DTOからコード値をgetして、
<% if (sex.equals("1") {%>男 ... (taglibとか)
みたいなのを書くってことでしょうか。

それともDTOにUser#getSexName、getSexCodeを自前で準備するものですか。
これだと自動生成が大変なのですが。。。
前にViewでマッピングしようとするとコネクションが切断?されてるから例外になったり、
マッピングを自動でするような機能がなかったりして断念したことがあるのですが。

749 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 23:47:14 ]
>>748
その例外はO/Rマッパ依存の部分でしょ
たとえばJPAのリファレンス実装であるToplinkは参照専用のコネクションを開くので問題ない
それにリソースファイルで扱う場合も多いし、すべてアプリやライブラリなど実装次第としかいえんぞ

750 名前:デフォルトの名無しさん [2007/10/22(月) 16:02:03 ]
そこはentityにisMan()isWomen()を持たせたら?

751 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 19:55:03 ]
>>748
定数値と表示名称のマップをアプリケーションスコープに保存して
ELでアクセスしたりとか
DBに持たせてEntityの2次キャッシュにしたりとか
色々方法はあると思う

752 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 19:57:38 ]
俺はマップをアプリケーションスコープに入れる派

753 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 20:38:01 ]
>DBに持たせてEntityの2次キャッシュにしたりとか
これってどういうことなん?詳しくお願いしたいかもー。

754 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 21:59:39 ]
定数マスタとかをDBに持ってる場合
Hibernateなどの2次キャッシュ機能を使えば
アプリレベルでEntityを共有できる
これを通常のEntityと関連付けてLazyロードさせれば
Entityだけで名称表示を行える

まぁでも設定とか色々と面倒かも

755 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 22:36:37 ]
>>754
おー、なるほど、どうもです。

756 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 01:30:51 ]
O/Rマッパでキャッシングはデフォっしょ
やってないほうが少ないのでは?
おかげでLAZYが便利

ただ、hibernateではセッション明けとかないとダメかもね



757 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 21:41:49 ]
キャッシングした場合、定数マスタかなんかが更新されるタイミングっていつになるのでしょうか。
例えば、DB直接いじって定数テーブル?に1行追加して、htmlの画面で<option>がふえてねーじゃん!てことにならない?

758 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 22:10:44 ]
そら、なるんだろうなぁ

759 名前:デフォルトの名無しさん [2007/10/23(火) 22:37:32 ]
だめやん

760 名前:デフォルトの名無しさん [2007/10/23(火) 22:43:49 ]
ORマッパー=はいばね
な件

761 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 01:52:07 ]
ORマッパ使おうが使うまいが
キャッシュ対象は読み取り専用のデータだけでしょ
プロパティファイルのDB格納版というか

762 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 01:58:30 ]
リソースファイルも変更時には配備しなおしてVM再起動が必要だろ
それと同じこと

763 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 01:59:36 ]
>>757
キャッシュ対象データはO/Rマッパーを使って更新する

764 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 13:48:23 ]
>>757
だからデフォルトのキャッシュ設定はoff。

キャッシュ側で短めの有効期限を設定したり、
動的な更新を想定しないテーブルのみに使ったりする。

クラスタの場合はDB直接編集でなくとも不整合が起こるので、
分散キャッシュ(OSSだとJBoss TreeCacheが有名)を使う事もある。

765 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 22:27:37 ]
>>757
管理者機能でマスタ更新とか作ったりするが、それじゃだめ?
DB直接いじってもボタン押したらキャッシュ読み直しみたいな。
大抵そんな機能を要求されるとマスタに好きなだけ追加削除更新したいって言い出すけどな。
性別なんて男性・女性・不明ぐらいでいいのに全部編集したい!とかいう客は珍しくない。

766 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 10:28:47 ]
性別マスタの編集で追加削除ってどんな時代だろう



767 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 20:51:23 ]
時代っていうか顧客。
「MTFTS」「MTFTV」「その他」「不明」とかぞろぞろあるんじゃね?

768 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 23:19:50 ]
すまんすまん。性別は極端な例だったか。
最近はいろいろと考慮して、男・女の2択はまずやらないわけです。
そういう人からすると”不明”てのはあんまりよろしくないからね。
単純にデフォルトの表示を空白とか"-"にして必須選択にしないってのがうちの会社の流れです。

769 名前:デフォルトの名無しさん [2007/11/08(木) 20:01:01 ]
iBatis をつかってて、Generics関係で質問です。
以下のような ProductDao といったクラスを作り、
Product エンティティをリストで返すメソッドを作りました。

public List<Product> listProduct() throws Exception {
  SqlMapClient sqlMap = MyIBatisUtil.getSqlMap();
  return sqlMap.queryForList("Product.selectAll");
}

これで -Xlint:unchecked 付きでコンパイルすると、以下の警告が出ます。

警告:[unchecked] 無検査変換です
検出値 : java.util.List
期待値 : java.util.List<jp........Product>
    return sqlMap.queryForList("Product.selectAll");
警告 1 個

<Product>はどこにつければいいのでしょうか?

  return sqlMap.queryForList<Product>("Product.selectAll");

とやったら「シンボルを見つけられません」とでてしまました。


770 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 20:15:48 ]
>>769
原因はsqlMap.queryForListの戻り値が
型指定なしListになってるっぽいところじゃないかな。
キャストしても確か出たと思うので、
メソッド宣言の頭に@SuppressWarning("unchecked")をつけるとか。

771 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 20:31:40 ]
1.4までのライブラリはそうなるの多いね
でも、JPAは5.0前提なのにキャストが必要で警告でるってのは納得いかないんだぜ・・・

772 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 21:00:45 ]
レスどうもありがとうございます。
なるほど、com.ibatis.sqlmap.client.SqlMapExecutor#queryForList()が
Generics なしでビルドされているから(1.4デモ使えることを前提にしているから)
仕方がないということですね。

今作っているのは、自分の勉強もかねていて Genericsはあまり使ったことがないので、
生産性を度外視して極力 Generics を使っているのですが、
いろんなところでこの警告がでて直そうとすると疲れます。

>>769 で示したのは Dao の Impl クラスなのですが、
Dao のインターフェースクラスでは
public List<Product> listProduct() throws Exception;
というように、Dao を呼ぶ側に対しては Generics 付きで公開したいので、
>>770 のように @SuppressWarnings("unchecked") をつけて黙らせることにしました。
これで -source 1.5 -Xlint:unchecked をつけても、このメソッドでは警告が出ないようになりました。
勉強になりました。どうもありがとうございました。

773 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 21:27:11 ]
Genericsは1.4以前のコードとの相性もあるが、リフレクションとも相性が悪いからね。
外部との連携が多いと利点を活かしきれないことも多いとは思う。

JDBC4.0があと2年もすれば普及すると思うけど、
>>769の手間をデータベース開発元がやってくれるから凄く楽になる。
SQLを外だしするってだけでも恩恵はでかいからiBatisは残るだろうけど。

774 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 00:44:24 ]
ibatisをspring等と連携しないで使うには、
SqlMapClientをpublic static等で参照できるようにして
#setUserConnectionでjava.sql.Connectionをセット、queryXXXを実行するで問題ないでしょうか。
あと、いまいちSqlMapSessionの存在意義などがわからないのですが・・・

775 名前:デフォルトの名無しさん [2007/11/11(日) 18:18:46 ]
struts+ibatisで開発しています。
DBの接続先をibatisのxmlに記述しているのですが、
参照するDBが複数になってしまった場合どんな感じでやるのがベストだと思いますか?
単純に設定ファイル追加か、追加されたDBのコネクションを取得してセットしてやるが候補なのですが、おかしいかな。

776 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 21:22:36 ]
sqlMapClientはDB接続先をひとつしか管理できないよね?
なので設定ファイルを追加して、SqlMapConfig も複数にするしかないような気が。
ibatisのサイトのチュートリアルの7ページを改造してみた。
以前も同じような方式でやったが、ほかにいいアイデアがあればおれも教えてほしい。

public MyAppSqlConfig {
  private static final SqlMapClient sqlMap_A ;
  private static final SqlMapClient sqlMap_B ;
  static {
    try {
      // A用
      String resource = "com/ibatis/example/sqlMap-config_A.xml";
      Reader reader = Resources.getResourceAsReader (resource);
      sqlMap_A = SqlMapClientBuilder.buildSqlMapClient(reader);
      // B用
      resource = "com/ibatis/example/sqlMap-config_B.xml";
      reader = Resources.getResourceAsReader (resource);
      sqlMap_B = SqlMapClientBuilder.buildSqlMapClient(reader);
    } catch (Exception e) {
      throw new RuntimeException ("Error initializing MyAppSqlConfig class. Cause: " +e);
    }
  }
  public static SqlMapClient getSqlMapInstance_A(){
    return sqlMap_A;
  }
  public static SqlMapClient getSqlMapInstance_B(){
    return sqlMap_B;
  }
}




777 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 21:50:05 ]
>>776
thx。
やっぱそういう感じになるか。

>>774の#setUserConnection?をつかってもできそうな、できなさそうな


778 名前:デフォルトの名無しさん [2007/12/14(金) 00:33:18 ]
HibernateToolsでhbmファイルを自動生成しようとしてるんですが、
関連があるテーブルだと勝手に多重度が設定されますよね。
one-to-manyとか。

あれを自動で設定されたくないんですが、
自動生成時にオプションとかでオフにできないものでしょうかm(_ _)m

779 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 01:50:45 ]
DBから関連はずせば?

780 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 09:23:05 ]
DBの制約残したままでやりたいのですm(_ _)m

781 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 21:34:57 ]
DBの構造コピーして、関連はずしてマッピング作成ってのがてっとりばやそうだな

782 名前:デフォルトの名無しさん mailto:sage [2007/12/18(火) 08:58:11 ]
そうかやっぱり関連外す手しかないか...

ありがとうm(__)m

783 名前:デフォルトの名無しさん [2007/12/25(火) 14:20:30 ]
HibernateのSessionで質問があります。
いま自分がヘルプでアサインされた案件が(Struts+)Spring+Hibernateなのですが、
DAOの作り方が以下のようになっています。
スーパークラス:Org.springframework.orm.hibernate3.support.HibernateDaoSupport
各業務のDAO:HibernateDaoSupportをextendsする。
OracleのXML DB SQL関数を使いたいという理由で、HQLもcriteriaでもなく 生SQL を使っている。

各業務DAOでは、以下のようなコードになっています。
例:
public List getHogeTableEntity() {
 〜
 Session session = super.getSession();
 SQLQuery query = (SQLQuery) session.getNamedQuery("....");
 ScrollableResults sr = query.scroll();
 〜
}

質問1.:
このメソッドの中で、sessin.close()が呼ばれていなかったり、ScrollableResults.close()も
呼ばれていないのですが、これはNGですよね?
session には clear() というメソッドもありますが、close()とはどう違うのでしょうか?

質問2.:
上記のケースとは違いますが、似た質問です。
技術評論社のSpring入門なんかの本を見ると、以下のようなコード(例.p274)があります。
public List findPerson() {
 return getHibernateTemplate().find("from person");
}
ここでは close() がよばれていませんが
(そもそも org.springframework.orm.hibernate3.HibernateTemplate には close() がない)
これはこれでいいのですよね?


784 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 15:24:48 ]
環境によるけど、コネクションを各自にまかせるタイプと、
フレームワークなどがそれらを完全にコントロールしてユーザーは
コネクションを勝手に閉じたりしてはいけないタイプがある。

トランザクションがどの境界でコミットされるかなど、重要なことは多い。
わからないことがあったら普通に素直に聞いたほうがいいよ。
とくにあとからヘルプで入った場合はチーム内での暗黙のルールとかあると思うし。

785 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 00:39:23 ]
> 質問1.:
> session には clear() というメソッドもありますが、close()とはどう違うのでしょうか?
Hibernate は取得したオブジェクトを Session にキャッシュしている。
そのキャッシュのクリアが clear() で行える。
ただし、この関数を呼び出してしまうと、Session#save() で永続化しているが、まだDBにコミットして
いないアクションさえもクリアしてしまう。
close() はそのセッションの破棄を意味する。

786 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 00:45:09 ]
> 質問2.:
Spring の HibernateTemplate は基本的にすべての作業を HibernateCallback インターフェイス内で
行う。
この HibernateCallback には、Object doInHibernate(Session session) という関数が定義されており、
この関数に渡される Session は Spring が破棄してくれる。
さらに、Spring では HibernateCallback を実装しなくてもある程度は実行できるようにいくつかの簡単な
関数を HibernateTemplate で提供してくれている。
> return getHibernateTemplate().find("from person");
も、そのうちの一つ。これを、HibernateCallback を使用して実装すると以下のような感じになる。
return getHibernateTemplate().execute(new HibernateCallback() {
  public Object doInHibernate(Session session) throws HibernateException {
   Query query = session.createQuery("from person");
   return query.list();
  }
});
Spring のソースを追えばすぐに分かると思う。



787 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 00:54:03 ]
このように、Hibernate+Spring の組み合わせの場合、基本的には Session#close() などを Spring 側に任せるように
することが出来る。
>>784 も言及しているが、この辺は各プロジェクトでどのような扱いにしているのかで話が変わってくるので、
聞いた方が早い。

ただ、HibernateDaoSupport を継承したとしても、HibernateCallback の中でない限りは Spring が Session を自動的に
閉じたりすることを期待できない気もする。
とはいえ、AOP を使用して閉じるようにしているのかもしれないので断言は出来ない。
だけど、ScrollableResults は自力で閉じないとムリなような気が・・・。

788 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 01:28:46 ]
Struts+Spring+Hibernateの組み合わせなら、AOPで閉じてるかSession In Viewで閉じてるはず。
てか、俺はそうした。

789 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 02:08:53 ]
どこの現場もフレームワークの上にさらにかぶせてる場合も多いからなんとも
オープンソースだけにソースに手が入ってる可能性も高いしね

断言は危険

790 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 17:42:16 ]
みなさんレスどうもありがとうございます。
ORMapper は iBatis しか使ったことがなかったので Hibernate は初めてなのですが、とても参考になりました!

>>785 clear() の役割はわかりました。
たしかに Hibernate にはその特徴として 「永続化コンテキスト」というのがあるが、
そのキャッシュを破棄するということですね。

>>786-788 Spring の HibernateTemplate と組み合わせる場合は、Spring のなかで
Session が管理されているので、プログラマは意識しなくてよいというのも理解しました。

自分が理解した仕組み:
>>787 のように Spring AOP を使っていることが前提となるが、
1.context.xml で、transactionManager や、Transaction 管理させるAOPの設定をしておく
2.AOPで、たとえば update* というメソッドを AOP の範囲と設定しておく
3.update*() に処理が移ると、Session が確保される(Commons DBCP などを使っている場合、pool からひとつとってくる)
4.getHibernateTemplate().find() すると、内部で 3. で得たSession に対し DB アクセスが行われる
 (ThreadLocal 経由で DAO に Session が渡されるのかな)
5.update*() が終わると、トランザクションが commit され、session も close() される。

Spring のソースをDLして見てみましたが、>>786 で示していただいたソースは、
HibernateTemplate#find(String, Object[]) と同じものですね。


791 名前:783 mailto:sage [2007/12/26(水) 17:43:24 ]
( >>790 も私です)

こちらの状況ですが、フレームワーク担当に聞いたり、OSSをラップしているローカルフレームワークの
ソースを読んだところ、以下の状況でした。
・トランザクションの管理は、context.xml の AOP で行っている。
・独自に Interceptor や Adviser のようなクラスをつくり、そこで管理はしていない。
・実際には HibernateDaoSupport と業務DAO の間にローカルフレームワークの抽象クラスがあるが、
 ここでもトランザクション管理/Session 管理はしていない。

業務DAO が >>783 になっていることを告げると、フレームワーク担当もどうしたらいいかわからないということで
調べることになりました。

ということで、以下のように考えました。
・ScrollableResults は、Spring をうまく使っていようがいまいが、自分で close() する必要がある
・super.getSession() した場合、AOP の範囲の外を出たときに、session が自動的に close() されるかどうか
 調べる必要があり

うーん、サンプル作って実験してみるか・・・

ちなみに AOP は以下のように設定しています。


792 名前:783 mailto:sage [2007/12/26(水) 17:50:18 ]
<!-- TransactionManager -->
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
 <property name="sessionFactory"><ref bean="sessionFactory"/></property>
</bean>

<!-- Transaction proxy -->
<bean id="autoTransactionProxy" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
 <property name="beanNames">
  <list>
   <value>*Service</value>
  </list>
 </property>
 <property name="interceptorNames">
  <list>
   <value>tsInterceptor</value>
  </list>
 </property>
</bean>

続く

793 名前:783 mailto:sage [2007/12/26(水) 17:50:47 ]
続き

<!-- interceptor -->
<bean id="tsInterceptor"
 class="org.springframework.transaction.interceptor.TransactionInterceptor">
 <property name="transactionManager"><ref bean="transactionManager"/></property>
 <property name="transactionAttributeSource"><ref bean="tsAttribute"/></property>
</bean>

<!-- attribute -->
<bean id="tsAttribute" class="org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource">
 <property name="properties">
  <props>
   <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
   <prop key="insert*">PROPAGATION_REQUIRED</prop>
   <prop key="update*">PROPAGATION_REQUIRED</prop>
   <prop key="delete*">PROPAGATION_REQUIRED</prop>
  </props>
 </property>
</bean>

何度も連投すみません。以上です。

794 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 00:18:15 ]
>>783
お前がプロジェクトに対して発言権があるかどうかはわからないが、
おれは出来る限りHibernateDaoSupport を使うときには
HibernateCallback で実装を進めるようにしてもらったほうがいいと思ってるし、
方針が曖昧なようならそう提案してみてはどうだろう?

そうすることによって
・ Session の境界をコントロールしやすくなる。
(HibernateTemplateがネストしたときには下位のセッションが上流に合流する)
・session の close() 忘れが無くなる。
(これはテスト実行時にデッドロック的な挙動を引き起こしたりする)
という利点がある。

OpenSessionInViewパターンは一番シンプルなんだが、
View 層に処理が渡ってから DB にアクセスするしにいったりする挙動が
三層モデル大好きな奴らから理解を得られない場合があるしやめたほうがいい。
複数画面をまたいでオブジェクトを引き回すときには結局Hibernateのセッション切れるんで、
あんまり有利でないことも多いし。

795 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 00:38:31 ]
>>790
誤解のないように言っておくが、iBatisでもSpringと組み合わせれば似たようなことができるよ

796 名前:デフォルトの名無しさん [2008/01/16(水) 01:23:47 ]
Hibernateで、主キーはOracleのトリガで生成する場合で聞きたいのですが、
その場合にマッピングファイルに定義するIDジェネレータは SelectGenerator ですよね。

公式のチュートリアルにこんなんあったんですが、
------------
<id name="id" type="long" column="person_id">
<generator class="select">
<param name="key">socialSecurityNumber</param>
</generator>
</id>
※person_idがトリガで払出した代理キーで、socialSecurityNumberが自然キーらしいです
------------

僕が実現したいテーブルに自然キーはないので(ユニークになるカラムもPKだけ)、
以下のようにしたいのですが、keyが必須だとエラーがでました。
------------
<id name="id" type="long" column="person_id">
<generator class="select" />
</id>
------------

自然キーで指定するフィールドもないので、どうやって<id>タグ書けばいいのか分かりません。
どなたか教えてもらえないでしょうかm(_ _)m



797 名前:デフォルトの名無しさん [2008/01/20(日) 09:43:59 ]
Mr. Persisterには関連のマッピング機能は実装済みですか?

798 名前:デフォルトの名無しさん [2008/01/20(日) 13:04:53 ]
ORマッピングはこういう↓抽出も、効率的に出来るのでしょうか?

SELECT
    売上実績.*
FROM
    売上実績
        INNER JOIN 顧客 ON
            売上実績.顧客番号 = 顧客.顧客番号
        INNER JOIN 商品 ON
            売上実績.商品番号 = 商品.商品番号
WHERE
    売上実績.年 = 2007 AND
    売上実績.月 = 12 AND
    顧客.名前 = 'ひろゆき' AND
    商品.商品名 = 'うまい棒'


ORマッピングではないけど、独自実装のDAOで、
こういう感じのSQLを1回発行すればいいものを、数万回発行するものがあったので……


799 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 13:11:16 ]
いや、どちらかというとこんな感じか……
SELECT
    売上実績.*
FROM
    売上実績
        INNER JOIN 顧客 ON
            売上実績.顧客番号 = 顧客.顧客番号
        INNER JOIN 会社 ON
            顧客.会社番号 = 会社.会社番号
        INNER JOIN 商品 ON
            売上実績.商品番号 = 商品.顧客番号
WHERE
    売上実績.年 = 2007 AND
    売上実績.月 = 12 AND
    会社.社長 = 'ひろゆき'
    商品.商品名 = 'うまい棒'


800 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 13:14:37 ]
やべー、
売上実績.商品番号 = 商品.顧客番号 じゃなくて、
売上実績.商品番号 = 商品.商品番号
連投すまん。

801 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 15:25:07 ]
>>798
それができないマッパってたぶん存在しないぞ

802 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 21:40:23 ]
その独自実装のDAOが1TABLEマッピングしか出来なかったんだろ?
昔、誰かが作ったそんな独自ORマッパーがあって、使えんから
改造した経験がある。公開されてるので、さすがにないだろ。

803 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 09:24:19 ]
Seasar2とかのDAOでもそれってできる?

804 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 15:31:37 ]
俺もわかっていないのでみなさんに聞きたい(おしえていただきたい)。
以下であってる?


○iBatisの場合、>799 のような SQL を直接書いて、得られた結果セットは <resultMap> タグに書いておいた
売上実績 エンティティにマッピングされる。(これはよくやってる)

Hibernate の場合、売上実績の hbm に、売上実績.顧客番号→顧客.顧客番号 とかの関連 を書いておけばよい。
ただし join フェッチにしないとだめ。
# あ、結果セットは売上実績TBL単体しか見てないので、この場合は joinフェッチとか select フェッチとか関係ないんだっけ?



805 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 15:51:17 ]
>>803
S2DaoはSQLファイル書けばできる。
S2JDBCはSQL書かなくてもできる。

806 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 20:11:07 ]
JPAサポートしてるツールでJPA使うのが一番らくかもね
Hibernateも今後JPA実装をまずメインにしていくし



807 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 21:09:23 ]
っつーか、JPA仕様作ってるのがHibernateだからな。

808 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 23:34:51 ]
>>807
仕様策定とプロダクトと一緒にするなよと

809 名前:デフォルトの名無しさん [2008/01/21(月) 23:51:59 ]
>>808
Hibernate陣営が仕様策定に大きく関わっているってことだろ?

810 名前:デフォルトの名無しさん [2008/01/30(水) 23:21:38 ]
hbm2javaで、javaソースコードを
UTF-8で作成したいのですが、どのような設定を行えばよいでしょうか?
>>62で書かれている事象と同じようなことになってしまいます...

811 名前:デフォルトの名無しさん mailto:sage [2008/01/30(水) 23:30:02 ]
java -Dfile.encoding=UTF-8

812 名前:デフォルトの名無しさん [2008/02/08(金) 20:54:05 ]
Springは基本的にコアは 1.1.x で完成していて、
1.2.x 以降は設定ファイルの書式が若干良くなったり
かえって悪くなったりしてるだけじゃなかろうか。
(XML 名前空間は使いにくいから失敗だと思う。
機械が読むには悪くないけど、人間が書くには疲れる。)

spring-ws や spring-webflow みたいなサブプロジェクトが
どれだけ完成度高めていくかと、
新たに面白いサブプロジェクト生まれないかなぁって辺りに関心がある。
コアのバージョンはもうどうでも良いって言うか。

Guice や Sesar2 はハナから問題外じゃね?
デファクト取っちまってるプロダクトがどうしたって強いし。
あとは Rails にだまされてる人達が
どれだけ早く DI の妥当さに気がつくかだけでしょ。

813 名前:デフォルトの名無しさん [2008/02/08(金) 21:53:32 ]
ふと思ったがJAXBとJPAが強力に結びついて
XML->Beans->DBまで一発でリレーション作れたら凄い楽かも。
ついでJAXBの生成したBeanにバインドしたSwingフォームを作ってくれるとなおよし。

814 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 03:37:21 ]
>>812
マルチうざ

815 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 03:39:52 ]
>>813
NetBeansはさわったことあるかね?
JPA直はコンポーネントバインディングでできてるからJAXBも問題ないでしょ

でも、JAXB直はあまりないんじゃね?
JAX-WSで使うのが本筋でしょう

これもNetBeansだと全自動で鯖もクライアントも用意できるし

816 名前:デフォルトの名無しさん mailto:sage [2008/02/09(土) 23:46:31 ]
検索取得系の処理用にとiBATISに興味があるのですが、
(1)DTOや検索条件ホルダーにゲッターとセッター必須ですか?
この手のクラスなら単純にpublicフィールドでいいじゃんと
(2)SQLテンプレートを別ファイルにしないオプションはありますか?
別ファイルのSQLのIDの代わりに、
テンプレートの文字列+DTOのClassを引数にできたいしませんか?

ちなみに更新系はアクティブレコード方式のマイナーなの使っています。
DBはマーチン先生の言葉で言うところのアプリケーションデータベースで、
DBA、データ管理者を開発の主要メンバが兼任していて、
処理は大量の項目を持つテーブルのCRUD処理がメインで、
複雑なドメインモデルが必要なロジックはほとんどなく、
保守運用上開発者は当然テーブル構造を熟知していなきゃだめだめ、
な環境だと初めにテーブルありきで名前による自動マッピングで全てを解決する
シンプルなアクティブレコードがいいのかなぁって思ってます。




817 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 00:05:19 ]
すでに使ってるフレームワークがあるのならそれを使ったほうがいいんじゃない?
更新系と同一のものを使えばキャッシングとか性能向上されるようになってるはずだよ

818 名前:816 mailto:sage [2008/02/10(日) 10:31:26 ]
>>817
実は複雑な検索には、そのActiveRecord方式のフレームワーク使ってないです。
基本的に テーブル(ビュー)--ドメイン 
を設定ファイル無しでマッピングするので、もしフレームワーク使うなら、
複雑なJOINの過程の検索条件列を無理矢理最上位のSELECTに書き、
元の1レコードがN件分現れる非常に直感的でないビューを作成しないといけないのです。

そのため今はSQLを引数に、読取り専用汎用ドメインを作成するような
ユーティリティでお茶を濁している感じなのですが、Webのシステムでないとはいえ、
文字列連結でSQL組んでたりであまりよろしくないのです。

両者とも私が関わる前からあり、別に私が選択した方式ではないです。
ActiveRecordで更新系に関してシンプルになるのは割りと気に入っているので、
複雑な検索系だけはiBATISなんかで改善できないかぁと思って色々調べてます。

819 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 15:07:54 ]
うーん、その既存のフレームワークが厄介ということか
どのO/Rマッパにしろたいていキャッシングするからそれを無効に設定できるやつを選んでね
そもそもその既存のフレームワークはキャッシングはしてないの?OFFにするとパフォーマンス下がるよね

検索系だけなら複雑なO/Rマッパは使わないでCommons DbUtilsがいいんじゃない?
JDBCのラッパなのでコネクション取得できればそれでいいわけで

昔からあるということは新しいJDKとかつかえないだろうからなおさらかな

820 名前:816 mailto:sage [2008/02/10(日) 17:53:20 ]
>>819
以前にソースを見たらスレッド・トランザクション単位で、
主キーをキーにHashTableにドメインのインスタンスを保持していましたが、
常にDBからSELECTし、同じ主キーのインスタンスが既にマップに存在するなら
当該インスタンス上の値を上書きして返すようになっています。
なのでキャッシュしていてもパフォーマンス向上が目的でなく、
同じ主キーのインスタンスは1つということの保証が目的と理解しています。

Commons DbUtilsのソースを落として見てみました。
今現在のやり方はマップリストを返すやつと大体同じです。

iBATISは名前パラメータと動的部分をタグで制御っての気になります。
名前によるバインドはOraclePreparedStatementで直接受けちゃえば
使えそうだけど、それは反則のような気がして・・・。

821 名前:デフォルトの名無しさん mailto:sage [2008/02/10(日) 18:45:55 ]
今となってはiBATISってそんなに便利なものにもみえないけど、
SQLを書きたいのか、隠したいのか、JDK5が使えるのか等
いろいろ前提条件があるからなんとも

iBATISは設定ファイル書いたりするのがたるいよ
今のバージョンはどうなってるかわからないけど

O/RマッパとしてはiBATISとDBUtilisはカプセル化が薄いので習得は容易だと思う
でもこの程度ならその自前のやつとそうそうかわらないかと

JDK5が使えるならJPAとか使うのもいいかも
標準技術だけあって各種ツールサポートが一番充実しているのが強み

822 名前:816 mailto:sage [2008/02/11(月) 00:27:15 ]
JDK5は今は使えないです。SQLは隠さない方向で。

求める機能としては名前パラメータのSQL文字列と、
検索条件のマップもしくは検索条件DTOを引数にして結果のマップのリストを取得。
戻りのDTOのClassも引数に追加してDTOの配列で結果を取得。
スカラークエリから各種スカラー値を取得できるショートカットもあれば便利。
バインド後に実際に実行されるSQL文字列のログ出力。
(パラメータの型を無視して''やエスケープなしで単純置換して文字列でも可)
ソートキー列と値の配列から指定キー以降でMAXN件取得なんかもあれば。
なければ自分で作れば済むような機能もありますが・・

今日調べたらSpringJDBCのNamedParameterJdbcTemplateが求めるものに近そうです。
ソース見たら名前パラメタの条件の値がコレクションなら複数の?,?に展開とか賢い。
素のPreparedStatementだとIN句簡単につかえないのに。
ネックは5.0じゃなきゃ駄目なのと、Springのjarに組み込まれてる点か。


823 名前:デフォルトの名無しさん mailto:sage [2008/02/11(月) 02:15:27 ]
SpringJDBCが使いたいのならバージョンさげれば1.4で動くはず

DTOのリストでデータが帰ってくるのでいいのならDBUtilsで十分かと
当たり前だけど、SQLを隠さずにしようと思うと制限は出るよ
足りない機能はそれをラップすればいいだけ

マップやDTOを検索条件にするのはたぶん流行ってないかと

824 名前:816 mailto:sage [2008/02/11(月) 10:59:15 ]
一部の機能を放棄すれば1.4でも使用可能なのですね、勘違いしてました。

マップで条件指定って流行ってないんですか。
リストか可変長引数が主流ということでしょうか?
それだとWHERE句で指定する列やサブクエリの数自体が可変で、
かなり動的にテンプレートを組み立てないといけない場合に
?の追加と条件リストへの値の追加との同期が厄介かなと。

名前パラメタとマップで条件指定なら、SQLテンプレートだけを動的に組み立てて、
別途条件MAPには順番気にせず、値が条件指定無しでNULLだろうが全部入れておけば、
内部で実際に名前パラメタで使用して?に置き換わったものだけ、
その順番で条件マップから条件の配列に再構築してくれる。
っていう点で有利だなと思ったのですが。


825 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 15:30:30 ]
Seasar2とHibernateで学ぶデータベースアクセス JPA入門
book.mycom.co.jp/book/978-4-8399-2594-9/978-4-8399-2594-9.shtml


826 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 23:41:03 ]
問題はJPAと一番相性がいいのがEJB3で
続いてSpringJPAサポートなところなんだよね。

Seasar2やHibernateに依存しまくる文章はないものと信じたい。



827 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 00:59:49 ]
>>826
SpringJPAサポートって何かメリットあったっけ?
何のありがたみもないJpaTemplateとJpaDaoSupportしか知らないんだが。


828 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 03:17:54 ]
Seasar2ってついてるから買わない

829 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 14:04:52 ]
ただのJPAの本でよかったんだけどなぁ・・・

830 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 18:03:43 ]
hibernate3 + Spring なのですが、
@Entity で bean とテーブルマッピングは一箇所で定義するが、
@NamedQuery は使用せず、SQL は外出しにする良い方法はないでしょうか?

マッピングは annotation を使いたい、しかし SQL は外出しにしたい。
というのが希望です。

831 名前:デフォルトの名無しさん mailto:sage [2008/03/26(水) 18:43:33 ]
Springつかってるならそれでインジェクトすればいいだろう・・・

832 名前:830 mailto:sage [2008/03/26(水) 20:45:09 ]
>>831
あ、DAO に突っ込めばいいってことですよね?
そんで session で createQuery なり createSQLQuery を呼ぶと。
確かにそうですね。

実は下記の記事を読んで、
www.ibm.com/developerworks/java/library/j-genericdao.html
これの GenericDao を使いたいなと思ったんです。
ただ、それだと DAO が query用のメンバで汚くなるかな、と…

と思ったんですが、それはそれで query をまとめとくクラスを作るとか、Map を使えば無問題っぽいですね。
あ、なんか解決っぽいです。
ありがとうございます。

833 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 10:10:38 ]
>>830
JPAでやってるならorm.xmlに書けば出来る

834 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 02:25:36 ]
Hibernateで複数のテーブルorビューに一つのマッピング定義and一つのEntityって可能なんですか?

835 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 17:02:07 ]
>>832
これの日本語訳を見つけた。
www.ibm.com/developerworks/jp/java/library/j-genericdao/


836 名前:デフォルトの名無しさん [2008/04/17(木) 23:16:09 ]
HibernateなどのORツールを使う利点ってなんでしょう?
beanに手書きmappingすることで工数削減以外の、
パフォーマンスなどで利点があるのでしょうか???



837 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 23:28:25 ]
今SQLをゴリゴリ書いてシステム作ってるけど、
テーブル間の関連を書いておくだけで簡単に関連をたどっていけるのはかなりラク
A4何ページにもなるようなSQLなんて見とれんよ

でもHibernate使うのであればそれなりの知識は必要。
迷ってるぐらいならやめとけ

838 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 23:37:46 ]
>>836
工数削減できれば十分じゃね?
つまり給料増えるわけだ

実際のところ複雑なSQL発行することももうほとんどないけどね
昔はSQL発行をぎりぎりまでチューニングしないとまともに実用速度が出なかったけどね

へたなSQL書くよりO/Rマッパのほうが効率がいい場合も多いし

839 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 23:50:40 ]
>>838
工数削減⇒売り上げ減⇒間接費の負担増⇒給料減

840 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 23:54:25 ]
>>838
個人的にはそのとおりなんですが、
要員調達の困難さ(OR技術者が少ない)が障害で、上司が導入を拒んでいるんですよ。
で、他に理由があればいいなと思いまして。

841 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 00:01:41 ]
攻め方として、

みんながみんなORまっぱをしってるひつようはないですよ。

SQL技術者なら多いという判断でしょうか?
であればSQLサポートツールとしてiBATISかS2DaoかS2JDBCを導入させてください。

とか。

842 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 00:21:51 ]
>>840
道具に流されるのはよくないが、JPAとか標準的なO/Rマッパは調達は容易だと思うけど
教育のコストも普通は考慮して納期設定するからどの程度の人員かどうかだな、結局は

>>841
S2JDBCはいわば俺俺JPAだから個人的にはオススメしにくい
それくらいならJPA使ったほうがいい

JDBC直でもいいとは思うけど、フレームワークでDBアクセスの方法はある程度絞ったほうがいい
まずはcommonsとかからスタートしてステップアップしていったほうがいいかも

JPAの利点はJavaEEの標準技術なのでサポートするツールがたくさんあるところだな
実装はRIのToplinkかユーザー数の多いHibernateの2択になることがほとんどだと思う

ToplinkはJPA2.0でもRIとなる予定で今後に期待されるとか、TopLink自体はOracleのものだから
glassfishかOracleのAS使う予定があるのならそちらがいい

843 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 00:31:54 ]
トランザクション系の処理が中心でリレーションシップがある
複数のテーブルからなる情報を取り扱うシナリオで、次のような条件を含む場合。
更新を前提にするので読み取りにJOINは使えないか使いにくい。
必要に応じてアクセスパスをたどる方法でのデータ取得が望ましい。
楽観的排他。
こういうケースでORMはおすすめ。

逆に問い合わせ中心でJOINや射影が有効。大域処理。
シビアなロック制御が必要な処理といったケースではあまり必要じゃない。
単純に1テーブルを1データオブジェクトにマップするだけが目的だったら正直どうでもいい。


844 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 00:37:28 ]
>>842
JPAのまともな実装見たこと無いんだけどいいのあるか?

845 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 00:39:02 ]
JPAでというお勧めであればS2JDBCはちょっと弱いけど、純粋に開発効率とメンテナンス製あげようと思ったらS2JDBCはなかなか良いと思う

846 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 00:41:45 ]
>>844
TopLink Essentialsでいいんじゃねーの?
吐き出すSQLみてるとLAZYとか一番まともそうだよ



847 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 01:02:13 ]
そもそも、今どうやって書いてるんだ?


848 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 01:16:24 ]
JPAの範囲で済むならTopLinkでもいいが
SQLや実装固有の機能使うならHibernateの方がいい

849 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 01:20:23 ]
SQL使いたかったらDatasourceをインジェクトすればいいだけだと思うんだが

850 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 09:37:00 ]
>>839
工数削減が売上減ってどんだけバカな見積もりだしてるのw

851 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 14:28:35 ]
工数減った分技術料で乗せたらいいんじゃ

852 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 14:56:02 ]
>>850-851
なんという殿様商売
こちとら工数×単価でどっちも削られっぱなしなんだぜ?

853 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 19:00:48 ]
単に営業がバカなだけだろ、それ

854 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 23:39:09 ]
ふつうは開発効率がよくなった結果、残業が減ってハッピーとだろう
期間は今までどおりにしろよ

855 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 23:57:23 ]
>>852
オマエが受身すぎなだけだろ。
バカは甘やかしてもいい事無いぞ

856 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 00:00:00 ]
>>852 の気持ちはよくわかるし、ほかの人のレスも正論なのはわかるけど。

この前 NTTデータとNRIの人と話したが、
あいつら、エンドユーザには絶対に単価情報を出さないって言ってた。
「人月ビジネスすると儲からないので、絶対一括」。
そして >>852 のような下請けが削られる。これ最強。

もっとむかつくのは、うっかりデータの新人が教えてくれたんだが、
うちら下請けには、すぐ工数削るのに、エンドユーザへは一切金額下げてない。

ほんとむかつく。まぁデータやNRIでここを見ている人もいるだろうし、優秀な人もいるけど。

あと、データの公共はほんとクソだな。自分たちは何もできないのに、
役人の顔色伺いながら、こっちの計画書の揚げ足取りしかしない。
法人のほうが、まだまし。



857 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 00:11:53 ]
ttp://www.atmarkit.co.jp/news/200710/31/ipa.html

まぁ技術力は要らないという人種ですから・・・

858 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 01:32:15 ]
気持ちはわかるが
>>856
> うちら下請けには、すぐ工数削るのに、エンドユーザへは一切金額下げてない。
当たり前だろ。



859 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 01:53:51 ]
だって企業名を盾に中間マージンを抜くのが仕事だもの。

みかかデータ。

860 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 20:18:37 ]
結構数見てきたけどまともな奴いない。
というかいなくなるな、みかかは・・・

861 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 22:56:55 ]
>>856
下請けなんてやるからいけない。
うちは10人ほどしかいない会社だが、元請しかやらないよ。


862 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 00:11:40 ]
小さい会社だと数千人月とかの仕事はもらえないからなぁ

863 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 00:29:29 ]
>>862
ちょw
10億前後ってことかよw
そりゃそうだろww

864 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 01:01:44 ]
数千人月の案件は大手SIerが受注すればよろし
だがしかし数百人月の案件は中堅に譲るべし
中規模以下の案件まで大手が受注して下請けに出すから
業界がおかしくなるんじゃ

865 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 02:15:04 ]
>>862
小さい会社がそんなの受けてどうすんの?
一人当たりの利益が同じならば大きい仕事でも小さい仕事でもかまわんだろ

866 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 02:47:00 ]
マ板でする話をム板でしてるあたりがアレなんだよな



867 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 13:33:46 ]
昨日の JJUG Cross Community Conference の、一番最後のひがさんのセッション。
www.java-users.jp/contents/events/ccc2008spring/sessions.html

まぁ内容的にはちょっと無理があったが、そのうちPowerPointも上記サイトで公開されるとのこと。
(スレ違いすみません)

868 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 20:27:47 ]
>>867
というか、ひがタンの会社、ITゼネコンじゃないのか?www

869 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 21:01:03 ]
>>868
だから上司にはそういうタイトル名だとはいってないという記述があったはず

870 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 19:02:53 ]
>>869
ひがは上司とか、わからない奴をだますことしか考えてないな。

871 名前:デフォルトの名無しさん [2008/05/15(木) 00:00:55 ]
329 名前:デフォルトの名無しさん[sage] 投稿日:2008/05/13(火) 22:04:29
冷ややかな戦争勃発w
ttp://d.hatena.ne.jp/masataka_k/20080513/1210661500#c

342 名前:デフォルトの名無しさん[sage] 投稿日:2008/05/14(水) 02:05:36
はぶ参入で抗争激化!さぁ、盛り上がってまいりました!

343 名前:デフォルトの名無しさん[sage] 投稿日:2008/05/14(水) 02:08:47
とりあえず、保存しといた。
s04.megalodon.jp/2008-0514-0207-34/d.hatena.ne.jp/masataka_k/20080513/1210661500

347 名前:デフォルトの名無しさん[sage] 投稿日:2008/05/14(水) 07:16:26
面白くなってきたな。Seasar界隈は人格的にちょっとあれな人が多いのが魅力w

348 名前:デフォルトの名無しさん[sage] 投稿日:2008/05/14(水) 07:40:37
でも、理事のBlogでやることじゃないよこういうことはメールベースでやるべきだと思う
野次馬的には面白いかもしれないけど企業から見たら不安になって採用を躊躇するところが出てきてもおかしくないからね

352 名前:デフォルトの名無しさん[sage] 投稿日:2008/05/14(水) 14:02:42
マーケ的にまずいのでseasar3はとりあえず表に出さないでくださいとかいうのはちょっとやばい

353 名前:デフォルトの名無しさん[sage] 投稿日:2008/05/14(水) 14:04:14
元理事は一旦収束していたのに、なにをしたかったのだろうか。そして日記非公開の理由とは・・・?asipの参戦はありうるのか!?

354 名前:デフォルトの名無しさん[sage] 投稿日:2008/05/14(水) 14:08:14
うわ、ほんとだ 閉鎖した

355 名前:デフォルトの名無しさん[sage] 投稿日:2008/05/14(水) 16:31:01
DB関連とか色々勉強させてもらったけど、このしみったれた感覚が所詮デブオタなんだなと思うわ。

872 名前:デフォルトの名無しさん [2008/05/17(土) 10:30:28 ]
ひがです。

Seasar2の後継プロジェクトとしてSlimを申請します。
SlimはかつてはSeasar3(?)と呼ばれていたものです。
詳細は、Seasarカンファレンスで発表します。

# 開設プロジェクトに関する情報
プロジェクト名:Slim
一覧に記載する簡単な説明:
"Less Is More"をコンセプトに持つ、フルスタックフレームワーク。
所属するトップレベルプロジェクト名:Sandbox.java
リーダアカウント名: higa
希望サイトアドレス: slim.sandbox.seasar.org
Maven用groupId: org.seasar.slim

よろしくお願いします。
ml.seasar.org/archives/operation/2008-March/003758.html

873 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 11:23:37 ]
関係ないだろ。
よそのスレでやれ。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<245KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef