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 以降
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();