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 以降
331 名前:328 mailto:sage [2006/08/17(木) 18:32:31 ] >>330 で、結局利点はなんなのでしょうか(^^;
332 名前:デフォルトの名無しさん mailto:sage [2006/08/17(木) 18:35:56 ] >>329 個人の趣味で使うものってことでしょうか?? 仕事で使うもんじゃないってことでFA?
333 名前:デフォルトの名無しさん mailto:sage [2006/08/17(木) 18:42:12 ] >>331 オブジェクトとSQLのマッピング作業をフレームワークがやってくれる点。
334 名前:デフォルトの名無しさん mailto:sage [2006/08/17(木) 18:43:03 ] >>329 のレスから>>332 のような結論が出る時点でDQNエンジニア確定だな。
335 名前:デフォルトの名無しさん mailto:sage [2006/08/17(木) 18:46:33 ] ぶっちゃけ俺DQNエンジニアだとおもう。 まっぱーの利点とか理解できないし。 だから教えてくださいお願いします。 >>333 マッピングってDTOつくって、ResultSetから値を取り出してDTOに入れていくってことですか? ただそれだけですか? そこでそんなにバグが出たり工数がかかったりしてるんですか?
336 名前:デフォルトの名無しさん mailto:sage [2006/08/17(木) 19:01:57 ] >>335 検索だけじゃなくて、挿入・更新のときのマッピングもね。 DQNかも知れないエンジニアを大量に使わざるを得ないプロジェクトで、 テーブル数が数十個ある場合で、カラムの追加変更などがある場合でも フレームワークにやらせるよりも手作業の方が早くて確実なら使う必要はないだろう。
337 名前:328 mailto:sage [2006/08/17(木) 19:10:21 ] それだけしか利点がないならやっぱ内の会社にはいらないのかもしれない。。 ほんとにそこでみんな困ってるの??? そのあたりって仮にまちがえてもテスト段階でバグ発見しやすい部分だと思うし そもそもDTOに入れたり出したりするのなんてそんなに大変な作業でも ないとおもうんですが・・・。 うちのシステムもテーブル150ぐらいあるし、 カラムの追加変更もときどきあるけど 一度に追加変更されるのって2、3テーブルぐらいのものだし それだけのためにxml書いたりといった面倒な作業が 工数的、費用的ににペイするのかしら?? あたらしいもの好きな人たちが趣味でやってる領域なのでは? 実際に業務に使ってるひといるの???
338 名前:デフォルトの名無しさん mailto:sage [2006/08/17(木) 19:25:27 ] XMLファイルを手書きしてたらメリットは感じないたろうね。 トータルの記述量はあまり減らないし、かえって面倒と感じるだろう。 そこは自動生成するところだよ。
339 名前:デフォルトの名無しさん mailto:sage [2006/08/17(木) 19:32:14 ] ORM=XML設定ファイル必須というわけでもない。 S2DAOや、Hibernate Annotation、EJB3はXMLによるマッピング不要だ。
340 名前:328 mailto:sage [2006/08/17(木) 19:39:49 ] XMLをテーブル定義から自動作成する工数と DTOなど自分でコーディングする工数 システム開発全体にかかる工数から比較したら これらが締めるのは微々たるものでは?
341 名前:デフォルトの名無しさん mailto:sage [2006/08/17(木) 19:51:09 ] >XMLをテーブル定義から自動作成する工数と >DTOなど自分でコーディングする工数 ちがう。 テーブル定義からXMLとDTOとを自動生成する工数と DTOを自分でコーディングおよびSQLとDTOの値の受け渡し処理の コードを書く工数とその部分をテストする工数の合計だ。 後者の方が早くて確実なら使う必要はない。
342 名前:328 mailto:sage [2006/08/17(木) 19:54:00 ] その2つだけをくらべたら後者のほうが遅くて不確実なんですが OR mapperに潜んでいるバグのリスクや、 各OR mapperの使い方を覚える工数を考えたら やっぱ使わないって判断かなあ。 そもそもわざわざ導入したところで削減できる工数が少なすぎるような気が。 あんだけ雑誌やネットで騒がれておきながら メリットってこんだけなの? なんかほかにメリットないのかしら・・。
343 名前:デフォルトの名無しさん mailto:sage [2006/08/17(木) 19:54:11 ] そう感じてて、それで本当にいい! ノープロブレム! って思うなら、それでいいじゃねえか。 俺はDTOを自分で書くなんて冗談じゃねえが。 Hibernate Annotationでハッピーライフ。
344 名前:328 mailto:sage [2006/08/17(木) 19:57:38 ] いや、どう感じるかは問題ではなく 客観的な指標から判断して どちらが生産性の向上につながるのかが知りたい。 なんでこれだけのものにみんな大騒ぎしてるんだろう? なんかあるのでは?って思ってしまう。
345 名前:デフォルトの名無しさん mailto:sage [2006/08/17(木) 20:02:51 ] 生産性にまともな測定方法なんてネーヨ むかつくやり方を続けると、精神衛生に悪くて生産性が下がる。 それだけ。
346 名前:デフォルトの名無しさん mailto:sage [2006/08/17(木) 20:35:55 ] >OR mapperに潜んでいるバグのリスク おまいのところがGavin Kingより優秀な開発者を抱えてるならリスクとなり得るなw
347 名前:デフォルトの名無しさん mailto:sage [2006/08/17(木) 20:47:21 ] >>345 それは真理だな。 >>344 なんにもないから安心しろ。 頑張って車輪を発明し続けてくれ。
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 ] 関係ないだろ。 よそのスレでやれ。