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 以降
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 ] どうしてわざわざオブジェクトに情報を詰めなおすのか 知っているか?