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 以降
2 名前:デフォルトの名無しさん [2005/12/16(金) 11:56:08 ] 2げと?
3 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 11:57:05 ] ●O/R-Mapping Framework各種 [HYBERNATE] ttp://www.hibernate.org/ [Cayenne] ttp://objectstyle.org/cayenne/ [Torque] ttp://db.apache.org/torque/ [iBATIS - SQL Maps] ttp://ibatis.apache.org/ [Java Ultra-Lite Persistence (JULP)] ttp://julp.sourceforge.net/index.html [Jakarta Commons DbUtils](O/R-Mappingというよりは、O/R-Bridge) ttp://jakarta.apache.org/commons/dbutils/ [Amber - Lightweight Java R/O Mapping Framework] ttp://sourceforge.net/projects/amber-db ●その他関連情報・ツール [JoSQL] JavaオブジェクトをSQLで操作 ttp://josql.sourceforge.net/ [SQL Generator] Javaでお手軽かつ動的にSQLを生成する ttp://sourceforge.jp/projects/sql-generator/
4 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 12:12:38 ] とりあえず立てた。あとはヨロ ノシ
5 名前:デフォルトの名無しさん [2005/12/16(金) 13:09:16 ] ここも貼ろうよ [GlassFish / EJB3.0 ReferenceImplemention ] https://glassfish.dev.java.net/
6 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 20:53:47 ] これも。 [S2Dao] ttp://www.seasar.org/s2dao.html
7 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 21:29:39 ] Mapping-Framework使いの皆さんに聞きたいんですが、 今回、Java⇔Oracleで、基幹システム(見積、受注、発注、出荷、在庫など)を 組むことになったのですが、 こういうのって意外と顧客独自な複雑な仕様があるので、テーブルもすごい何十個とかあります。 全てのテーブルのMappinngクラスを作ったりするもんなんですか? 複数テーブルとリレーション組んだりする時もその都度Mappinngクラス作るんですか? なんか、結局SQL文コードに埋め込む形になっちゃいそうなんですが・・・ 実際どうなんでしょうか?
8 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 01:01:54 ] >>7 通常は、クラスを自動生成したりするツールがあるので、テーブルの数はあまり問題じゃない。 問題は、顧客独自な複雑な仕様のほうだろ。それがO/Rマッパーでサポートできるかどうか。 というか、O/Rマッパー使うときは、O/Rマッパーを使うという前提でテーブル設計しないとつらいことが多い。 一般には、楽できるO/Rマッパーほどテーブル設計の自由度が低く、逆に自由度が高いO/Rマッパーだとあんまり楽にならない。 >複数テーブルとリレーション組んだりする時もその都度Mappinngクラス作るんですか? O/Rマッパーによる。
9 名前:デフォルトの名無しさん mailto:sage [2005/12/17(土) 10:32:02 ] あるシステム会社で、 .NETだったが、O/Rマッパーして、自動生成されたクラスがあるのに、 実際は、そのまま。SQL発行して、レコードセットみたいなものを使って取得してたりしてた。 こういのだけは、カンベン
10 名前:デフォルトの名無しさん [2005/12/22(木) 21:23:10 ] ホシュ
11 名前:デフォルトの名無しさん [2005/12/23(金) 17:56:04 ] EJB3のEntityManagerで、INSERTするときに、値にCURRENT_TIMESTAMPのようなSQLから取得する値を加えることは可能ですか?
12 名前:デフォルトの名無しさん mailto:sage [2005/12/23(金) 22:33:39 ] 値がnullのときにinsertに加えないようにする設定があったような気がする
13 名前:デフォルトの名無しさん [2005/12/24(土) 10:20:18 ] blanco Framework hp.vector.co.jp/authors/VA027994/blanco/blanco.html これもここでいいのかな? 使った人レビューなぞきぼんぬ。
14 名前:デフォルトの名無しさん mailto:sage [2005/12/24(土) 11:00:27 ] >>7 基幹システムって時点でテーブル何十個じゃすまないだろう。 基幹システム作った経験無ければ、パッケージに品。
15 名前:デフォルトの名無しさん [2005/12/24(土) 13:55:50 ] >>12 INSERT INTO HOGE(HOGE1, HOGE2, INSERT_DATE) VALUES (?, ?, CURRENT_TIMESTAMP) のようなSQL文をpersistで作らせるのは無理でしょうか?
16 名前:デフォルトの名無しさん mailto:sage [2005/12/25(日) 01:11:14 ] ほんとにいつも悩ましいのは、 複合キーでER設計するか? 楽観排他制御をサポートしているか? ネイティブのSQLを使うか? 今んとこ、Hibernateがもっともトラブルが少ないね。俺のプロジェクトでは。
17 名前:デフォルトの名無しさん [2005/12/25(日) 13:04:36 ] ZEKEってどーなんだろ。 未踏のやつ。
18 名前:デフォルトの名無しさん [2005/12/25(日) 21:41:07 ] 現在MySQL + HibernateのWebアプリケーションがあり、 これをOracle10gに移行しようとしています。 MySQLではPKを自動インクリメントで取得していますが、 Oracleではシーケンスになるので、 MySQLで <generator class="identity" /> ってなってるところを <generator class="sequence"> <param name="sequence">シーケンス名</param> </generator> としてやればよいのでしょうか?
19 名前:デフォルトの名無しさん [2005/12/28(水) 02:11:48 ] HIBERNATE イン アクション www.amazon.co.jp/exec/obidos/ASIN/4797330805/ ついに出るねぇ。 英語読めない俺としては嬉しい限り。
20 名前:デフォルトの名無しさん mailto:sage [2005/12/28(水) 03:50:24 ] >>19 原著が出たのは結構前なので、やっぱりHIBERNATE 2.xベースの解説なのかな。 3.xへの補足も入っているとうれしいんだけど。
21 名前:デフォルトの名無しさん mailto:sage [2005/12/28(水) 18:27:04 ] ibatisがキャッシュしてしまう問題で、 sqlmapのflushDataCache()メソッドを使用したのですが キャッシュが消えずに、2回目のsqlでエラーになってしまいました。 キャッシュを削除する方法はないでしょうか?
22 名前:デフォルトの名無しさん mailto:sage [2005/12/28(水) 20:26:14 ] >>21 selectの抽出項目を条件により動的に変更する、を言っているの? どうやらibatisではだめなようだね。 rezultクラスをHashMapにしても、最初のクエリーの項目が残り、 次回のクエリーで、初回の項目と違うとエラーになります。 Builderで再ビルドすれば、全てクリアできるので問題なし。 1クエリごとに生成するので大変だが・・・
23 名前:デフォルトの名無しさん mailto:sage [2005/12/28(水) 20:43:13 ] one-to-one がまともになる予定ある?
24 名前:デフォルトの名無しさん mailto:sage [2006/01/01(日) 09:17:49 ] >>21 remapResultsのことかな?
25 名前:デフォルトの名無しさん mailto:sage [2006/01/05(木) 10:55:27 ] >>24 remapResultとはどのようなことでしょうか。 名前から推測すると、多分その設定によるものだと思います。 ちょっと調べてみます。
26 名前:デフォルトの名無しさん mailto:sage [2006/01/05(木) 13:52:45 ] >>24 <select id="select_query" remapResults="true"> $query$ </select> と書いて実行しましたが、XML Parser Error. になりました。ibatisはバージョン2です。 下記を参考にしてみました。 ttp://www.mail-archive.com/ibatis-dev@incubator.apache.org/msg00225.html
27 名前:デフォルトの名無しさん mailto:sage [2006/01/05(木) 14:52:44 ] >>26 どこでパースエラーになってるんでしょう? ちなみに、dtdはttp://www.ibatis.com/dtd/sql-map-2.dtdとおなじものですよね?
28 名前:デフォルトの名無しさん mailto:sage [2006/01/05(木) 14:57:54 ] >>26 ああ、バージョンは2.0.9以降じゃないとダメみたいで。
29 名前:デフォルトの名無しさん mailto:sage [2006/01/05(木) 20:01:06 ] マッピングを作成するときに、一番手軽(作成するものが少ない)で、 一番メンテナンスしやすい(修正のほとんどが設定ファイルなど)のは ダントツでibatisで間違いなし???
30 名前:デフォルトの名無しさん mailto:sage [2006/01/05(木) 22:47:01 ] Cayenneもやればできる子>>29 ただし既存のテーブルには弱いが。
31 名前:デフォルトの名無しさん mailto:sage [2006/01/05(木) 23:33:04 ] Hibernateでも、自分で作成するものは少ないし。
32 名前:デフォルトの名無しさん mailto:sage [2006/01/06(金) 09:27:33 ] >>29 カナ〜リ大きなXMLを管理する覚悟は必要。特にテーブルの数が多い時。
33 名前:デフォルトの名無しさん mailto:sage [2006/01/06(金) 09:52:14 ] 29です。ibatis派です。 sqlはすばらしい言語なので、プログラムではsqlのすばらしさを邪魔しないフレームワークが 一番賢いと考えています。 つまり、sqlで対応できるところは、ロジックではなくsqlを修正する。 そのsqlの修正は、設定ファイル内のsqlそのものだけ、が一番よいと思います。 そのほうがsqlとjavaの特徴を最大限に引き出せるし、メンテが楽です。 俺は簡単かどうかに関係なく、クラスの数が多いのは好きではないです。 マッピング処理の為にクラスを作成するのは納得できないです。それが自動生成できるものだとしても。 いろいろなマッピングツールを見ましたが、特にEJBはひどいと思いました。簡単なことを複雑に考えようとしているし。 クエリの結果データをbeanにマッピングするたびにクラスを生成するツールは好ましいと思いません。 どうでしょうか、この意見
34 名前:デフォルトの名無しさん mailto:sage [2006/01/06(金) 09:59:10 ] > sqlはすばらしい言語なので、 この仮定に同意できない。
35 名前:デフォルトの名無しさん mailto:sage [2006/01/06(金) 10:18:16 ] >>34 リレーショナルデータベースさわるのにはとてもいいと思う。 リレーショナルモデルもきっちり作りこまれてるので、かなりいい。 >>33 > 特にEJBはひどいと思いました。 EJB2までの話。 > マッピングするたびにクラスを生成する クラスは生成せんだろ。 型保証とIDEによる補完を考えると、Javaの場合はテーブルに対応するクラスがあったほうが楽だしメリットも大きいと思われ。 SQLの外だしにこだわるなら、HibernateやEJB使うときでも外出しにすればいい。
36 名前:デフォルトの名無しさん [2006/01/06(金) 10:37:14 ] >>33 ドメインモデルの設計をビシィとやる。もちろんその時は RDBMSの存在など微塵も意識しない。 さて実装を考える段になって、既存のRDBMSの設計を 見ると、ドメインモデルと合致しない。 俺はiBATISが本領を発揮するのはこういう時だと思う。 だから、 >マッピング処理の為にクラスを作成するのは納得できないです。 もしこれが『DB設計にクラス設計が影響されるのは納得できん』 ということなら君の意見に賛成する。 iBATISはDBとOOのミスマッチをSQLで吸収可能だからね。
37 名前:デフォルトの名無しさん mailto:sage [2006/01/06(金) 10:38:09 ] >>35 HibernateやEJB3って、ibatisみたいにsqlをかけるのでしょうか。 独自のSQLだと思っていたのですが。古い情報ですか。
38 名前:デフォルトの名無しさん mailto:sage [2006/01/06(金) 10:49:03 ] >>36 まさにその通りです。 sqlとjavaクラスの間に物理的な依存性を持たせるのは危険だと思いっています。 その依存性を切り離すのがまさにibatisなのかなぁと。 sqlそのものの結果をクラスに好きなようにマッピングできるのですから、すごい。 というか、ibatisが普通の考え方だと思うんですよね。 なんか、javaはより難しく考える傾向にあるような・・・・。
39 名前:デフォルトの名無しさん mailto:sage [2006/01/06(金) 11:00:13 ] >>38 ただibatisのSQL設定ファイルはいわばテンプレートなんだがその能力が低い。 リストや配列のプロパティで、そのままtoString()を呼んでDBに登録したいがエラーになる。 前のレスにあったけど、velocityみたいなテンプレート機能があるといいけど。 それに、qつのクエリのマッピングが一つのオブジェクトしか対象にできないのが痛い。
40 名前:デフォルトの名無しさん mailto:sage [2006/01/06(金) 22:04:16 ] >>37 かけるよ。
41 名前:デフォルトの名無しさん mailto:sage [2006/01/09(月) 19:25:17 ] S2Daoで、各テーブルに対応するJavaファイルを作るのって手でやるんでしょうか? リバースエンジニアリングしてくれて、勝手に作ってくれたりします?
42 名前:デフォルトの名無しさん mailto:sage [2006/01/09(月) 20:11:58 ] >>41 S2DaoMaker
43 名前:デフォルトの名無しさん [2006/01/09(月) 20:25:16 ] S2、S2って最近うぜー
44 名前:デフォルトの名無しさん mailto:sage [2006/01/09(月) 21:52:18 ] いちいちageるなうぜー
45 名前:デフォルトの名無しさん mailto:ごめん質問投げたいのでsageない [2006/01/10(火) 10:10:07 ] iBATIS_ToolsのAbatorを試した人、感想キボンヌ eclipseのpluginらしいのだけど。。。
46 名前:デフォルトの名無しさん mailto:sage [2006/01/10(火) 11:04:00 ] >>45 velocityみたいに、sqlmapの中で使えるtoolがほしい・・・
47 名前:デフォルトの名無しさん mailto:sage [2006/01/10(火) 11:54:09 ] ibatisで結果をHashMapにセットすることができますが、 Beanの中にあるHashMapにデータをセットすると、そんなフィールドないとのエラーになります。 エラーを見ると、対象がHashMapなのに、setプロパティ名を探しに行っているみたいです。 HashMapをDynaBeanに変えてもだめでした。 これは仕様でしょうか。 気になるのが、queryForObjectではなく、 SqlMapClientBuilder.buildSqlMapClient(reader);でエラーになります。 エラー Cause: com.ibatis.common.beans.ProbeException: There is no WRITEABLE property named 'test' in class 'java.util.HashMap' sqlMap <resultMap id="user" class="ibatis.User"> <result property="hashMap.test" column="HASHMAP_TEST" /> </resultMap> <select id="select_hash" resultMap="user" > select 'ssss' as HASHMAP_TEST from dual </select> クラス public class User { private HashMap hashMap = new HashMap(); ・ public class User { private DynaActionForm hashMap = new DynaActionForm(); ・
48 名前:デフォルトの名無しさん mailto:sage [2006/01/10(火) 17:09:54 ] ibatisですがiterateの中でisEqualをかけるとエラーになりました。 無謀でしょうか・・・ <iterate prepend="WHERE" property="data" open=" ID IN (" close=")" conjunction="," > <isEqual property="#data[]#" compareValue="1"> #data[]# </isEqual> </iterate>
49 名前:デフォルトの名無しさん mailto:sage [2006/01/10(火) 18:36:39 ] >>47 HashMapに設定可能というのは、 resultMapのclassにHashMapを使える というのであって、 HashMap型のプロパティに値を設定できる 訳ではないのではないかという気がします。
50 名前:デフォルトの名無しさん mailto:sage [2006/01/10(火) 18:39:54 ] >>48 自分で試したわけではないけど、こういうページがありました。 ttp://www.mail-archive.com/ibatis-dev@incubator.apache.org/msg00854.html <iterate>の内側のプロパティ名はそのまま渡しているみたいです。
51 名前:デフォルトの名無しさん mailto:sage [2006/01/10(火) 19:04:38 ] >>49 >>50 ありがとうございます。 再度修正して実行してみます。
52 名前:デフォルトの名無しさん [2006/01/21(土) 17:14:07 ] Hibernateについて質問なんですが、テーブルAとテーブルBがあって、 テーブルAの主キー:A_ID、 テーブルBの主キー:B_ID、A_ID(複合キー) という場合、テーブルBに対応するクラスBとそのマッピングファイルってどう書けばいいですか? 複合キーの一部が外部キーの場合にどう書いたらいいのか分からなくって・・・・・・。
53 名前:デフォルトの名無しさん mailto:sage [2006/01/25(水) 21:50:39 ] ibatisでiteratorの入れ子は可能でしょうか。 入れ子のiteratorのpropertyのインデックスを指定しないと動作しないです。
54 名前:デフォルトの名無しさん mailto:sage [2006/01/27(金) 08:41:26 ] >>52 HSQLDBのテストテーブルがちょうどそんな形になってる。 Hibernate Toolsにhbm.xmlを自動作成させたらこうなった。 <composite-id name="id" class="test.entity.ItemId"> <key-property name="invoiceid" type="integer"> <column name="INVOICEID" /> </key-property> <key-property name="item" type="integer"> <column name="ITEM" /> </key-property> </composite-id> <many-to-one name="invoice" class="test.entity.Invoice" update="false" insert="false" fetch="select"> <column name="INVOICEID" not-null="true" /> </many-to-one>
55 名前:デフォルトの名無しさん mailto:sage [2006/01/27(金) 10:22:32 ] Hibernateで他がロックしているかどうか取得する方法ってありますか? 他がLOCK TABLEしている時にHibernate側でupdateしようとすると、他が コミットされるまで、止まってしまいます。
56 名前:デフォルトの名無しさん mailto:sage [2006/01/27(金) 22:12:52 ] >>55 使えるDBは限られるけどorg.hibernate.Session#lock()に LockMode#UPGRADE_NOWAITを指定すれば出来ると思われ。 ただし、他のトランザクションのロックをポーリングしたいって場合は、 設計の方に問題がある可能性がかなり高い。っつーか、ほとんど禁じ手。 トランザクションはユーザー入力を介在させずに短時間で完了させるべし。
57 名前:デフォルトの名無しさん [2006/01/27(金) 23:41:50 ] >>54 レスありがとうございます。 そのマッピングだと、複合キークラスが class ItemId { private Integer invoiceid; private integer item; } で、ItemクラスのフィールドにItemIdクラスとInvoiceクラスのフィールドを定義する、 って感じで合ってますか?
58 名前:デフォルトの名無しさん mailto:sage [2006/01/28(土) 02:35:28 ] >>57 合ってる。クラスもそのように自動作成された。 Hibernate in Actionに載ってたけど、many-to-oneタグのupdateとinsertをfalseにすることが重要みたい
59 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 00:02:02 ] >>58 ありがとうございます! やってみます。 ちなみに、参考までに伺いたいのですが、Hibernate Toolsの自動生成のマッピングの品質(?)ってどうなんですか? 本とかネットでも手動でマッピング定義の解説が多いような気がするので、 もしかしたら、手動でマッピングしないとパフォーマンスに問題があるとか、 複雑なテーブルはマップできないとか、そういう事情でもあるのかな?って思って。
60 名前:デフォルトの名無しさん mailto:sage [2006/01/29(日) 10:08:35 ] >>59 DBスキーマからマッピングファイルを作るのは、以前はMiddlegenを使うことが多かったみたい 本や雑誌の説明等にも、Middlegenの使い方がよく説明されている。 今のHibernate側の方針は、スキーマからマッピングファイル、永続化クラスの作成まで Hibernate Toolsに全部任せようとしてるように見える 実際使ってみた印象は、テーブルが大量にある場合はとても便利だと思う。 特に複合主キーを使ってる場合は、主キークラスを自動で作ってくれるのがありがたい。 テーブルに外部キー制約をつけておけば、自動的にone-to-oneやmany-to-one等の関連定義もやってくれる。 反面、フィールドの型の定義がちょっと微妙で、char型やbyte、short、boolean型等を積極的に使ってくる。 プリミティブ型とラッパーオブジェクトの区別が曖昧。「not nullカラムのときはプリミティブ型」のように定義してほしかった。 また、TIMESTAMP型に対してjava.util.Dateを定義してしまうので、TIMESTAMPをversion管理に使いたいときは修正が必要。 テーブル名やカラム名にアンダーバーが入ってるときは、アンダーバーを自動的に排除してクラス、フィールドの名前を作成し マッピングファイルのカラム名定義でマッピングしてくれる。 しかし、いちいちマッピングファイルに書くぐらいなら、NamingStrategyで定義した方がいいと思うので あまりうれしくなかったりする。 結局、手で作るより便利なのは間違いないが、出来たファイルやクラスを一通りチェックする作業は必要だと思う。 Toolのカスタマイズ方法があまりわかってないので、もしかしたらもっと便利に使えるかも?
61 名前:デフォルトの名無しさん mailto:sage [2006/01/31(火) 00:42:23 ] >>60 なるほど! チェック作業は入るとしても、全部手書きよりは断然効率良さそうですね。 是非使ってみたいと思います。 いろいろとありがとうございました!
62 名前:デフォルトの名無しさん mailto:sage [2006/01/31(火) 11:34:03 ] Hibernate Toolsは前使おうとしたが、 ファイルエンコードが指定出来ず苦労した記憶が・・・ (UTF-8のプロジェクトで使うのにMS932でしか生成できず) さすがにもう改善されたのかな?
63 名前:デフォルトの名無しさん mailto:sage [2006/01/31(火) 17:51:14 ] Hibernate Toolsを使ってDBから定義ファイルを生成するときに many-to-manyカラムを生成する方法をご存じの方がいたら、教えてください。
64 名前:デフォルトの名無しさん mailto:sage [2006/02/02(木) 23:54:22 ] koichikさんの日記にあるようなhibernateが実行しているsqlを整形して 表示するのってどうやるんですか? show_sqlだとインデントまではしてくれないですよね。。。
65 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 03:34:10 ] >>64 つ hibernate.format_sql
66 名前:デフォルトの名無しさん mailto:sage [2006/02/03(金) 21:50:00 ] >>65 Thanks a lot!
67 名前:デフォルトの名無しさん [2006/02/08(水) 02:14:46 ] nHibernateはどうよ?
68 名前:デフォルトの名無しさん mailto:sage [2006/02/08(水) 12:50:30 ] Collectionの扱いがちょっと面倒
69 名前:デフォルトの名無しさん mailto:sage [2006/02/08(水) 14:27:01 ] >>67 素直にADO.NET使った方がよさげ
70 名前:デフォルトの名無しさん mailto:sage [2006/02/09(木) 00:57:25 ] 自前でやれってか?
71 名前:デフォルトの名無しさん [2006/02/09(木) 08:04:25 ] >>69 他でも時々そういう意見目にするんだけど、 NHibernateよりADO.NET使う方がいい理由ってなんなの? なんかはっきりとADO.NETの方がいい!!って理由あんのかなぁ?
72 名前:デフォルトの名無しさん mailto:sage [2006/02/09(木) 09:03:23 ] ORMならADO使ったほうがよさげ つかスレ違い
73 名前:デフォルトの名無しさん mailto:sage [2006/02/09(木) 09:05:57 ] >>71 ツールのサポート 情報の量 人の量
74 名前:デフォルトの名無しさん mailto:sage [2006/02/10(金) 11:31:03 ] ibatisのデータマッピングでの強い味方 ttp://canetrash.seesaa.net/article/2778499.html
75 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 21:36:14 ] HibernateやEJB3.0,iBatis程度をありがたがるjava技術者は哀れだな。
76 名前:デフォルトの名無しさん mailto:sage [2006/02/11(土) 22:03:12 ] ふむ、じゃあ何をありがたがろうか?
77 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 10:24:46 ] HibernateやEJB3.0,iBatisよりもADO.NETの方が優れている理由は、ORMとしての 実力は大きく変わらないが、Viewまで含めて.NETの機能が練られているところだろう。 いくらDAOのコーディング量が減っても、部分最適にしかならないから工数が減らない。
78 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 15:35:39 ] じゃあViewにWicketってことで終了。
79 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 16:26:54 ] Clickは?
80 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 16:29:22 ] 所詮は寄せ集めだな。
81 名前:デフォルトの名無しさん mailto:sage [2006/02/12(日) 21:59:44 ] フロントから裏までWebObjectsで終了じゃん。
82 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 13:52:52 ] >>80 それをいうと「寄せ集めと大差ないクオリティのXXX(値は各自の信仰に依存)って何よ?」って話になるからやめれw
83 名前:デフォルトの名無しさん mailto:sage [2006/02/13(月) 17:48:53 ] 漏れ寄せ集めの方が好きだぬ。 なんかeclipse VS netBeans(あるいはvisualStudio)の 議論を見てるみたい。目的目標出さずに道具の議論って あんま意味ないよ。
84 名前:デフォルトの名無しさん [2006/02/14(火) 02:34:07 ] 1000行のデータを1ページ50行ずつでページングしたりする時に、 各ページに必要なデータだけをDBからロードするようにしたいんだけど この場合はどうやればいいんだ? 当方Hibernate3を使用してます。
85 名前:デフォルトの名無しさん mailto:sage [2006/02/14(火) 08:09:30 ] >>84 ttp://www.hibernate.org/hib_docs/v3/reference/en/html/objectstate.html#objectstate-querying-executing-pagination
86 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 15:57:21 ] Hibernate3初心者ですが、ちょっと教えて下さい。 many-to-one のマップで、もし該当データが存在しなくても怒られない方法、 知りませんか? 例えば <class name="item"> <id name="id"/> <many-to-one name="bid"/> </class> <class name="bid"> <id name="id"/> <pro name="amount"/> </class> これで from Item item left join fetch item.bid をやって、 取得したリストを表示させると、bidを取得できなかったitemの item.bid.amountをgetすると、 LazyInitializ E org.hibernate.LazyInitializationException TRAS0014I: 次の例外がログに記録されました。 org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed と、アボンです。 session閉じて分離オブジェクトになってんだから、良いじゃん、 と思うんだけど、教えて下され。
87 名前:デフォルトの名無しさん mailto:sage [2006/02/15(水) 21:46:00 ] not-null="ignore"
88 名前:デフォルトの名無しさん mailto:sage [2006/02/16(木) 08:24:05 ] OracleがJBoss買収したら、TopLinkとHibernateは一つになるのか? あと、JBoss CacheをOracleがどう使うのか気になるな
89 名前:デフォルトの名無しさん mailto:sage [2006/02/16(木) 17:30:07 ] EJB3でTopLinkとHibernateはひとつになってる希ガス
90 名前:デフォルトの名無しさん mailto:sage [2006/02/16(木) 19:03:37 ] APIが一つにまとまったからね。 TopLinkの「放出されていない部分」っていうと、現状JDeveloperに 載ってるGUIツールの部分や分散環境対応部分が大きいのだっけ? oc4jとJBossコンテナはどう棲み分けるのかなぁ、Oracleって GlassFishも支援してるから、まるでOracle一つの内で三つ巴に なってるみたいなイメージだね。 買収成功祈る>Oracle
91 名前:デフォルトの名無しさん mailto:sage [2006/02/17(金) 01:52:07 ] BEA、KodoをOpen JPAとしてオープンソース寄贈 pcweb.mycom.co.jp/news/2006/02/15/344.html
92 名前:デフォルトの名無しさん mailto:sage [2006/02/17(金) 02:58:08 ] WebアプリでHibernate EntityManagerを試してみたいんだけど、 persistence.xmlはどこにおけばいい? アプリルート/META-INF に置いても読み込めません・・・orz Persistence.createEntityManagerFactory("em1"); でコケます。 No Persistence provider for EntityManager named em1 とスタックトレースに出力されます。 ("em1"はpsersistence.xmlの<persistence-unit>要素のname属性に指定した名前) WEB-INF/classesに置いてみても同じです。 Ejb3Configurationを使ってhibernate.cfg.xmlを読み込んでEntityManagerFactoryを 作る方法は成功しました。 環境はJDK1.5.0/Tomcat5.5.15/Hibernate3.1.2/hibernate-entitymanager-3.1beta6 です。
93 名前:デフォルトの名無しさん mailto:sage [2006/02/17(金) 03:45:20 ] なんで唯一試すのがMETA-INFなんだろう・・・
94 名前:デフォルトの名無しさん mailto:sage [2006/02/17(金) 04:08:23 ] >>93 スミマセン。 > WEB-INF/classesに置いてみても同じです。 と書いたように、他にはWEB-INF/classesも試しています。
95 名前:デフォルトの名無しさん mailto:sage [2006/02/17(金) 07:28:25 ] >>92 WEB-INF/classes/META-INF/persistence.xml classpath内の「META-INF/persistence.xml」を検索しているみたい WARのMETA-INFに入れても認識しないので注意
96 名前:デフォルトの名無しさん mailto:sage [2006/02/17(金) 08:04:49 ] >>95 うぉぉぉぉぉ!!!!! 激しくサンクスっ! うごきましたー!
97 名前:デフォルトの名無しさん [2006/02/26(日) 16:58:56 ] SpringのgetHibernateTemplate().findで検索をかけたら、NoClassDefErrorが 発生しました。 loadAllだと問題なく抽出されるし、クラス名もちゃんとフルパスで指定 してるんですが、何が間違ってるんでしょうか。
98 名前:デフォルトの名無しさん mailto:sage [2006/02/28(火) 23:35:35 ] >>97 さすがに、HibernateとSpringのバージョンくらいは書いた方が良いのでは・・・?
99 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 01:32:48 ] これは失礼いたしました。 spring1.2.6とhibernate3です。
100 名前:デフォルトの名無しさん mailto:sage [2006/03/01(水) 17:14:08 ] Hibernateに関してですが、マッピングファイルに <version name="version" unsaved-value="negative"/> を記述して、バージョン管理をしていますが、このバージョンを 上げずに更新をするという処理は可能なのでしょうか。 一般的にはこのような処理は行わないと思いますが、2つのシステム で同じテーブルを読みに行くとき、他方のシステムは特定のカラムを 更新された場合、更新の検知は不要と考えており、上記のような処理 ができないかと考えました。
101 名前:デフォルトの名無しさん [2006/03/01(水) 23:30:21 ] >100 細かい粒度でクラスを書き、<component> でマッピングしましょう。 とかベストプラクティスに書いてあるから、Aシステムで更新するカラムと Bシステムで更新するカラムを別クラス(1テーブル)にしたら? とかいってみちゃったりして。 僕は上記の方法をとらないときはからなずバージョンによるロックかけるよ。
102 名前:デフォルトの名無しさん mailto:sage [2006/03/02(木) 01:04:51 ] >>100 排他制御はしないの?
103 名前:デフォルトの名無しさん mailto:sage [2006/03/02(木) 08:23:29 ] >> 101 ありがとうございます。 二つのクラスにしてみます。 >> 102 テーブルtにf1,f2,vというカラムがあって、 vがバージョン番号だとすると、Aシステムは、 f1,f2を更新する可能性があって、Bシステムは、 f1のみ更新します。 f1を更新した際は、システムA,B共にf3を更新します。 ですから、Aシステムがf2のみを更新する際は、 排他制御は必要ないと考えたのですが、いかがでしょうか?
104 名前:デフォルトの名無しさん [2006/03/02(木) 11:03:14 ] >103 1)Bシステム:データ取得(f1=a,f2=b,v=1) 2)Aシステム:データ取得(f1=a,f2=b,v=1) 3)Bシステム:データ保存(f1=a→y,f2=b,v=1→2) 4)Aシステム:データ保存(f1=a,f2=b→x,v=1) 排他制御死ぬほど必要じゃね? 3)がせっかく入力したf1はどこいくんだ?
105 名前:デフォルトの名無しさん [2006/03/02(木) 11:06:55 ] >100 100よ!私101だが、俺てっきりAシステムはf1のみ更新、Bシステムはf2のみ更新 を行うと思ってたからcomponentのはなしなんかしちゃったよ。 AとBで更新するカラムがかぶってるならテーブル1個で普通にバージョンによる 排他制御してくれ。理由は104が知っている。
106 名前:デフォルトの名無しさん [2006/03/02(木) 11:07:43 ] ↑ 誤:テーブル1個 正:テーブル1個、クラスも1個
107 名前:100 mailto:sage [2006/03/02(木) 17:15:09 ] ごめんなさい。記述が間違っていました。 × f1を更新した際は、システムA,B共にf3を更新します。 ○ f1を更新した際は、システムA,B共にvを更新します。 同じカラムを更新する場合はバージョンを両システムとも上げます。 >>104 4) のところでupdate文にwhere v=1 が含まれると思いますので、 エラーにならないでしょうか? >>105 両システムの更新するカラムがぶつかっている場合、ぶつかっている 箇所のみ排他処理をするのではまずいですか?
108 名前:デフォルトの名無しさん mailto:sage [2006/03/03(金) 00:17:58 ] >>107 dynamic-updateを使うってこと? 自分のとこでは使ってないから、dynamic-updateが確実なのかどうかよくわからないけど その場合でも、Aシステム用のクラスにはVersionカラムを定義せず、 ナンバーアップも排他制御も全て手作りで書くのが無難だと思う 業務的に必要なら仕方ないけど 更新前に余計にSQL発行するわけでもないし そこまでして排他制御を避ける理由がよくわからないな
109 名前:108 mailto:sage [2006/03/03(金) 00:19:54 ] × 排他制御を避ける理由 ○ バージョニングを避ける理由
110 名前:100 mailto:sage [2006/03/03(金) 09:25:31 ] >>108 バージョニングを避ける理由は、例として、 1) Bシステム : データー取得 (f1=a,f2=b,v=1) 2) Aシステム : データー取得 (f1=a,f2=b,v=1) 3) Bシステム : ユーザーがデーターの入力中 4) Aシステム : データー保存 (f1=a,f2=b→x,v=1→2) 5) Bシステム : 更新時エラー(バージョンが違うため) 3のデーター入力は入力項目が多いです。 4の更新内容は、Aシステムのみが使用するデーターカラム の更新のみで、Bシステムの動作には影響しません。 ユーザーの作業効率を考えると、システムに影響がないの であれば、5にてエラーとしない方がよいと考えました。
111 名前:デフォルトの名無しさん [2006/03/03(金) 18:29:20 ] >110 チミのいってることはへんでないヵ? (103)にて >Aシステムは、f1,f2を更新する可能性があって、Bシステムは、f1のみ更新します。 (110にて) > 3(=Bシステム)のデーター入力は入力項目が多いです。 ゆえにf1はたくさんの入力項目である。したがってAシステムも(人間が手で入力するのか自動で登録するのかは全く別として) たくさんの項目を設定する。 だ か ら 、 たくさんの項目を設定したAシステムのf1が、ちまちま手入力したBシステムで入力したf1によってけされてしまうだろ?大問題ではないの? それどころかAシステムでバージョンチェックしなかったらAシステムを同時に2人で使ったらデータが後勝ちしちゃうんだぞ。 そんなのDB使うときのポリシーとして許されるものじゃないんじゃない? だめだ。どう考えてもバージョンチェックによる排他制御は必須としか思えない。 > >>104 > 4) のところでupdate文にwhere v=1 が含まれると思いますので、 > エラーにならないでしょうか? ヴァージョンチェックを有効にしたらそりゃエラーになるよね。ただ、Aシステムはバージョンチェックをしたくないんでしょ? だからエラーチェックをしない前提だからべつにどうでもいいんじゃない?どうでもいいから単純にバージョンあげわすれただけ。 ちゃんとバージョンは4)のところで1→2にあげましょう。
112 名前:100 mailto:sage [2006/03/03(金) 18:46:20 ] >>111 > だめだ。どう考えてもバージョンチェックによる排他制御は必須としか思えない。 両システムが更新するカラム(f2)のみ排他制御を入れるのではまずいでしょうか? > Aシステムはバージョンチェックをしたくないんでしょ? Bシステムのみ使用するカラムはバージョンチェックをしないという方針です。 他の箇所はバージョンチェックします。
113 名前:デフォルトの名無しさん [2006/03/03(金) 21:38:04 ] >112 おい!、103の書き込みをちゃんと見ろ! 両方更新するカラムはf1だろ! Bシステムのみ使用するカラムなんてないだろ! 前提条件をころころかえるんじゃないよ。 わけがわからなくなるだろ!
114 名前:デフォルトの名無しさん [2006/03/05(日) 11:43:39 ] Hibernateってサニタイジングは自分でやらなきゃいけないの?
115 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 12:05:08 ] >>114 DBごとの駄目文字を上手いこと自動変換してくれるか、ってこと??
116 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 12:14:13 ] >>115 狭い意味だと文字列末尾の'\0'を取り去ることだけになっちゃうね。 広い意味だといくらでもひろがっちゃうし。 >>114 というわけで、どこまで考えてるのかを、お願い。
117 名前:デフォルトの名無しさん mailto:sage [2006/03/05(日) 12:32:40 ] PreparedStatementでやってくれる程度の処理
118 名前:デフォルトの名無しさん [2006/03/06(月) 18:53:18 ] Hibernateで、SQLのgroup byみたいなことするのって、SQL直書きでQueryクラスとかに渡すしかないのでせうか? criteriaはそんなこともできんのですか?
119 名前:デフォルトの名無しさん [2006/03/06(月) 19:06:13 ] お願いします!わかる人答えてください! 掲示板に書き込みしたのをパスワード入力して 消したら完全に消えるんですか???IDとか
120 名前:デフォルトの名無しさん mailto:sage [2006/03/06(月) 20:01:57 ] >>119 スレタイ読んで出直してくださいね。どこでも質問すればいいってもんじゃないです。
121 名前:デフォルトの名無しさん mailto:sage [2006/03/07(火) 01:17:02 ] >>118 HQLなら普通にgroup by書けばいい Criteriaは使ってないからよくわからんが↓あたりじゃない? ttp://www.hibernate.org/hib_docs/v3/reference/en/html/querycriteria.html#querycriteria-projection
122 名前:デフォルトの名無しさん [2006/03/07(火) 10:25:40 ] 返答どもです。 Hibernateのサイト見てやったらObjectの配列のListを返すとかいう美しくない結果にたどり着きましたが、それをとっかかりに以下の答えにたどり着きました。 これでClassA型で値が返ってきました。 //テーブルA(マスタ。ClassA)のうち、テーブルB(トランザクション。ClassB)にひとつ以上参照している行が存在するものを取得。返り値はClassA型のList Criteria crit = getSession().createCriteria(ClassA.class); crit.createCriteria("classB"); crit.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); ありがとうございました。
123 名前:デフォルトの名無しさん mailto:sage [2006/03/09(木) 09:57:53 ] ibatisのタイプハンドラには、String[]は型として使用できないのでしょうか。
124 名前:http://www.vector.co.jp/soft/win95/util/se072729.html mailto:http://msdn2.microsoft.com/ja-jp/library/h2k70f3s.aspx [2006/03/18(土) 22:04:51 ] TextSS のWindowsXP(Professional)64bit対応化おながいします もしくは64bitにネイティブ対応したテキスト置換ソフトありますか? そういや64bitにネイティブ対応している2chブラウザてありましたっけ?
125 名前:デフォルトの名無しさん mailto:sage [2006/03/18(土) 22:41:29 ] >>124 あちこちにマルチ乙
126 名前:デフォルトの名無しさん mailto:sage [2006/03/19(日) 08:50:46 ] hibernateを使おうと考えています。 既存のマスタが論理削除で管理されている場合、 論理削除チェックはどこでやるもんなんでしょう?
127 名前:デフォルトの名無しさん [2006/03/23(木) 23:23:50 ] 当方マカーです(ごめんなさい) Hibernate3を使い始めたんですが、hbmを作るのが面倒です(PostgreSQLでテーブル100個ぐらいある)。 eclipseにプラグインを入れてもエラーで墜ちまくるので実用的じゃなさそうです。 eclipse以外に、PureJavaでつくられたツールとかでテーブルを観て自動的にHibernate3用のhbmをつくってくれるものありませんか。
128 名前:デフォルトの名無しさん mailto:sage [2006/03/24(金) 11:12:39 ] マカーって自己紹介の意味が分からんし謝る意味も分からんがw www.hibernate.org/hib_docs/tools/reference/en/html_single/#ant これはどうですか
129 名前:デフォルトの名無しさん mailto:sage [2006/03/24(金) 15:24:35 ] マカ ttp://www.associe-net.co.jp/maca/
130 名前:デフォルトの名無しさん mailto:sage [2006/03/27(月) 18:58:40 ] OS:WindowsXP SP2 DB:Oracle XE O/R-Mapping Framework:iBATIS2.1.7 環境は上記の通りなんですが、 ttp://opensource.atlassian.com/confluence/oss/display/IBATIS/Oracle+REF+CURSOR+Solutions にあるような感じで、Procedureからの戻り値(OUTパラメータ)をBeanにマッピングするっていうようなことは出来るんですかね? 試してみたのですが、ResultSetが戻り値で返ってきちゃうんですよ。 ProcedureでのBeanとのマッピングってムリ?
131 名前:デフォルトの名無しさん mailto:sage [2006/04/07(金) 00:34:01 ] HibernateでDTOパターンを使い、更に排他制御を行いたい場合 バージョンカラムを含めた形でDTOに値をコピーし、 更新時に再びDTOから永続化クラスに詰め直してupdateする・・・という手順でいいの? 遅延ロードを設定していて、値を取得していない関連オブジェクトがフィールドにある場合、どう扱ったらいいのだろうか?
132 名前:デフォルトの名無しさん mailto:sage [2006/04/09(日) 12:42:56 ] 今頃なんだけど、OpenSessionInViewってどうなのかな? 個人的にはDAOから取り出したオブジェクトはDBから縁が切れていてほしい んだよね。なんかJSPで画面出してるときに、ここでDBになんかあったらど うしようとか考えるのが気持ち悪いというか。 とはいえDAOで似たような中身のオブジェクトに詰め直すというのも冗長だし。 みんなどうしてるの?
133 名前:デフォルトの名無しさん [2006/04/09(日) 13:16:57 ] リクエストのたびにhibernateのSessionつくってフェラチオして そのあとSessionをすぐにクローズしてる。Sessionはなるべく短く、短く。
134 名前:デフォルトの名無しさん mailto:sage [2006/04/09(日) 13:18:02 ] すまん、フェラチオ→フェッチ だ orz
135 名前:デフォルトの名無しさん mailto:sage [2006/04/09(日) 14:10:17 ] >>133-134 ( ゚д゚) _(__つ/ ̄ ̄ ̄/_ \/ /  ̄ ̄ ̄ ( ゚д゚ ) _(__つ/ ̄ ̄ ̄/_ \/ /  ̄ ̄ ̄ ( ゚∀゚ )アーッヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャ _(__つ/ ̄ ̄ ̄/_ \/ /  ̄ ̄ ̄
136 名前:デフォルトの名無しさん mailto:sage [2006/04/09(日) 17:30:03 ] >>133 お茶噴いた
137 名前:デフォルトの名無しさん mailto:sage [2006/04/09(日) 19:08:21 ] 相当短いんだろうな
138 名前:133 mailto:sage [2006/04/09(日) 21:22:50 ] すまねぇなぁ(;´д`) フェまで入力してATOKだとtabで自動変換するからそのままreturnおしたのさorz 普段どういう文章打っているかがバレバレだぜ〜
139 名前:デフォルトの名無しさん mailto:sage [2006/04/09(日) 22:29:35 ] 短く、短く
140 名前:デフォルトの名無しさん mailto:sage [2006/04/09(日) 23:29:17 ] 今はかってみたら16cmだった。ふつう?
141 名前:デフォルトの名無しさん mailto:sage [2006/04/10(月) 00:03:50 ] >>140 日本人としてはちょっと長めらしい・・・。 なんて話はさておき、 Hibernateでは主キーがないテーブルのマッピングはできないんだな。 まあ当然なんだろうけど・・・。
142 名前:デフォルトの名無しさん mailto:sage [2006/04/10(月) 06:58:11 ] Hibernateフェチ
143 名前:デフォルトの名無しさん mailto:sage [2006/04/10(月) 11:21:34 ] >>140 うちのダンナよりは長いよ
144 名前:デフォルトの名無しさん mailto:sage [2006/04/10(月) 13:38:04 ] >>133 てめえ人様の腹を捩らすとは何事だゴルァ
145 名前:デフォルトの名無しさん mailto:sage [2006/04/10(月) 13:39:15 ] >>140 お前金持ちだろ。 ピーナッツ食いまくって水ばっか飲んでるだろ。 それにオナニー回数も少なめだな? チンポの長さと将来成功することと何か関係があるらしいぞw
146 名前:デフォルトの名無しさん mailto:sage [2006/04/10(月) 14:04:55 ] >>140 が使った道具 アンドロペニス 男性器増大医療器具 送料無料 www.liquidsky.co.jp/
147 名前:132 mailto:sage [2006/04/10(月) 18:02:27 ] 少しはまじめな話題を振ったつもりだったのに 133のバカチンコのおかげで……orz
148 名前:デフォルトの名無しさん mailto:sage [2006/04/13(木) 01:58:13 ] CayenneがApache Incubatorに入ったね。 HibernateもJBOSSの支援を受ける中、ObjectStyleだけで支えるのは大変だと いうことかな。 おれはこのORマッパー、結構好きなんで、Apache加入後のiBatisのように、 着実に進歩していって欲しい。 とりあえず1.2は結構いい。
149 名前:デフォルトの名無しさん [2006/04/13(木) 18:22:12 ] >132 >133 OpenSessionInViewでもリクエストのたびにSessionはクローズしているとおもうが。 ただモデル(もしくはコントローラ)でクローズするか、View層でクローズするかの違い。 だからどっちでおこなってもSessionは短い、短い。 こんな事象のときにOpenSessionInViewは効果を発揮する。 【前提】 A-B-Cと各々1:n関連したテーブルがあり、画面ではその全てを表示する。 【OpenSessionInViewを使用したら】 HQLは「from A」でOK。あとはView層でかってに遅延ロードによってBとCはロードされる。 【普通にやる場合】 HQLは AとBとCをJoinしなければならない。 または、「From A」として取得した結果をループでまわして遅延ロードを発生させなければならない。 まあ、こんな場合はOpenSessionInViewをつかったら楽々ですよ。 DAOから取得したA EntityクラスをFormにつっこんだら終わりだもんね。
150 名前:149 [2006/04/13(木) 18:40:57 ] 続き でも問題はあるのだよ。 【問題1】 遅延ロードは沢山のSQLを出力するから嫌いだ。 じつは、ふつうに遅延ロードをやると確かに遅延しない場合に比べて遅ーいばあいがあるね。 でも、以下のありがちな前提条件と、mappingの設定方法が合わさると、はやいのだ。 【前提条件】 1.次の10件みたいなページング機能が要求されている。 そしてその実装はHQLではなく、汎用的にView層で行っている。 2.HQLまたはSQLでJoinするとえらく複雑でOracleのほうでコストがすごい。 【対処】 前提1の対処 ページングがあるってことは、遅延ロードは10件分しかしなくていいよね。 でも遅延しなけりゃデータ数分Javaのメモリまでは展開されるんだからデータ件数によって は遅延のほうがはやくなる。 それでも1件1件SQLが発生するのに抵抗がある人は、Hibernate-mappingの<Set>タグの Attributeで「batch-size」ってのがあるんで、ここを20とかにすれば20行一挙に取得するSQLが 発行される。これは便利。 前提2の対処 遅延なしでOracleのコストがかかっている場合は、SQLを単純になるように分割したら 分割したほうが速くなる ほら、共有プールのサイズとかあんまとれなくて、SQLであるコスト超えたら突然すごく 遅くなる場合あるじゃん。そんなときはjoinはずすとコストが下がるからサクサクと結果が かえるようになる(こともあるよね)
151 名前:149 [2006/04/13(木) 19:13:51 ] つづき 【問題2】 一覧表示系は問題ないが、一覧入力系で、かつカンマ区切りの数値や日付の入力がある。 【前提】 OpenSessionが機能してうれしいのは唯一View層での遅延ロードなのだから、そういう前提にする。 A-Bという1:nの関連があり、画面はAとBを同時に入力、Bのほうに数値と日付の入力がある。 JSFを使うとコンバータの機能があるから、多分簡単に解決する。だから前提はStrutsとする。 【対処】 Strutsで実装すると、カンマ区切りの金額、日付に対応するFormのAtributeはStringになると 思いますが、Bは遅延ロードの前提で、かつDBではNumber型やDate型なのでJavaの型は BigDecimalとDate型とかにならざるをえません。 でもValidateのためにStringは別途必要です。 HibernateではCustom型を定義できるので、BigDecimalとDateの型のカスタム型を作成して、 カスタム型はBidDecimalとString型を内部では同時にもつように定義しておけば、 ・ValidateはStringのほうで行い ・うまくBigDecimalに変換できるのであれば内部のBigDecimalのほうに値を移行 ・あとはForm内のEntityをSaveすれば、DBに保存するようにUserTypeのコーディングを行う。 こんなことをやれば、コーディングレス(FormのStringからEntityへデータを移送するコードを 数値・日付のプロパティ分似たようなロジックを作ることがなくなる)で一覧入力系の 実装が可能。 まあ逆にそこまでしないと一覧入力系で遅延ロードの恩恵が得られないので、一覧入力系は 遅延ロードに頼らないというのも1つの手かもね。
152 名前:130 mailto:sage [2006/04/14(金) 21:56:30 ] DBのデータ件数が少ない場合、別にPreparedStatementでも そこまで実行速度的に変わらんので、SQL直書きでもいいかな、と。 いちお、SSQLLibってのがあるらしい。 結局(PL/SQLだと)自分でResultSetをBeanにマッピングしないとダメか・・・。 StoredProcedureとBeanのマッピングってHibernateでもムリなん? Hibernate使ったこと無いので。 >>133 (*^ー゚)b グッジョブ!!
153 名前:デフォルトの名無しさん mailto:sage [2006/04/14(金) 23:29:58 ] (133の次のナチュラルな下ネタを待っているのはオレだけすか?)
154 名前:デフォルトの名無しさん mailto:sage [2006/04/19(水) 17:15:25 ] 他人が作成した既存のものを改修することになったのですが、iBatisのsqlmapを使用しているプログラムでした。 sqlmapconfig.xmlには、こんな風に書かれていました <transactionManager type="JDBC"> <dataSource type="JNDI"> <property name="DBJndiContext" value="java:comp/env/jdbc/test"/> </dataSource> </transactionManager> <sqlMap resource="sqlMap/test.xml"/> これで1データソースに対してクエリを発行していると思うのですが、 これを2種のデータソースを使い分けるように変たいと思っています。 そもそもデータソース2種を使い分けることが可能なのでしょうか?
155 名前:デフォルトの名無しさん mailto:sage [2006/04/20(木) 00:46:37 ] >>154 TomcatなどのServlet Container レベルで考えると、JNDI経由で複数のDataSourceを取ることはできる。 > <dataSource type="JNDI"> > <property name="DBJndiContext" value="java:comp/env/jdbc/test"/> > </dataSource> この辺の記述はまさにServlet Containerの設定をそのまま持ってきてるようにも見えるので (「java:comp/env/jdbc/test」というあたり)、iBatisでも出来るんだろうと思う。 でもiBatis使ってないのでその先は分からない。
156 名前:デフォルトの名無しさん [2006/04/24(月) 00:53:53 ] Javaじゃなくて申し訳ないんだけど、NHibernateでCollectionマッピングってみんな何使ってやってる? Setとかの代わりの定番ってある?
157 名前:デフォルトの名無しさん [2006/04/24(月) 01:50:24 ] >>154 String resource1 = "resources/sqlmapconfig1.xml"; Reader reader1 = Resources.getResourceAsReader (resource); SqlMapClient sqlMap1 = SqlMapClientBuilder.buildSqlMap(reader1); String resource2 = "resources/sqlmapconfig2.xml"; Reader reader2 = Resources.getResourceAsReader (resource); SqlMapClient sqlMap2 = SqlMapClientBuilder.buildSqlMap(reader2); try{ sqlMap1.startTransaction(); sqlMap2.startTransaction(); ・・・ sqlMap1.commitTransaction(); sqlMap2.commitTransaction(); (*) }catch(Exception ex){ sqlMap1.rollbackTransaction(); sqlMap2.rollbackTransaction(); }finally{ sqlMap1.endTransaction(); sqlMap2.endTransaction(); } とかは駄目? (*)のところで異常が起きると変な事が起きそうだけど ミッションクリティカルなシステムぢゃなきゃだいじょうぶでしょう・・・
158 名前:デフォルトの名無しさん [2006/04/25(火) 23:26:42 ] Hibernateって何て読むんですか?
159 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 23:38:41 ] >>158 ひべるなーて
160 名前:デフォルトの名無しさん mailto:sage [2006/04/25(火) 23:50:59 ] >>158 はいばーねいと、でいいんじゃないの?
161 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 00:59:50 ] 冬眠って読むんだよ
162 名前:デフォルトの名無しさん [2006/04/26(水) 14:39:18 ] >158 はぁい、ばーねいと! (やあ、ばーねいと) あい、ばーてぃす!(いいえ、わたしはばーてぃすです。)
163 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 14:48:17 ] カイ! エ〜ン ・゚・(ノД`)・゚・
164 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 14:52:21 ] ハーイバネット、ハーイバネットぉ〜♪ 夢のハイバーネットたかたぁ〜♪
165 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 19:14:12 ] Hibernateって、マッピングするときBean指定しないとダメなんですか。 ibatisではHashMapが使用できて、key=カラム名、value=値 で取得可能なのですが。
166 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 22:16:20 ] いや別にMapが欲しいだけならDbUtilだけでいいんだし....
167 名前:デフォルトの名無しさん [2006/04/26(水) 23:13:32 ] だれかJavaドメインモデルの実践的な実装を解説した書籍を教えてください。 サービス、ドメイン、DTO、エンティティなど単語はよく聞きますがUML 図ばっかりの本がおおくて実際のソースコードで実感できるものを見たことが 無いので。。。
168 名前:デフォルトの名無しさん mailto:sage [2006/04/26(水) 23:47:32 ] >>165 Mapでも取得可能。DOMのElementに値を詰めて返すことも出来る
169 名前:デフォルトの名無しさん mailto:sage [2006/04/27(木) 00:02:01 ] ドメインモデルって難しい言葉を意識するから難しく感じるんであって、 要するにあれって「ただのまっとうなオブジェクト」ってことなんじゃないの? 「USERテーブルの行をロードしたデータ」じゃなくて、「ユーザー」という 「もの」を表したオブジェクトって考えようよ、というのがドメインモデルの ベースにあるところじゃないかと。 オブジェクトだと考えたら、「ユーザーの登録を抹消する」なら「じゃあ unregisterメソッドを読んだら抹消するってことで」と自然に思うじゃん。 裏でどんなSQL投げようが、ファイル読もうがセッションをごにょごにょ しようが、抹消してくれればしったこっちゃないでしょう。それがオブジェ クト指向ってもんだ。 DBを前提に考えちゃうと「ユーザを抹消するってことは、まず関連付けられた 契約レコードをすべて抹消したあと、ステータスをごにょごぎょして、 ユーザーのレコードの削除フラグをオン。それを効率良くするには、関連 レコードをジョインして....」とか考えてしまって、それをそのままべたっと コードに書いてしまいがち。 オブジェクト指向的には、ユーザーというオブジェクトの「抹消」という 命令を呼び出したら勝手にごにょごにょして抹消してくれりゃいいわけ で、その抹消メソッドが裏で勝手に契約レコードを抹消してステータス 変更してくれりゃいいじゃん、それがオブジェクトってもんだろ? 契約だってオブジェクトなんだから、ユーザーオブジェクトの抹消メソッド のなかで、契約オブジェクトの契約解除メソッドよべばいいじゃん。 ってのがドメインモデルじゃないかな。 ↓さあ景気良くいこう
170 名前:デフォルトの名無しさん [2006/04/27(木) 00:16:08 ] > ドメインモデルって難しい言葉を意識するから難しく感じるんであって、 > 要するにあれって「ただのまっとうなオブジェクト」ってことなんじゃないの? おそらくそういうことなんだろうな〜とは思ってるんですが、「サービス」とか いうやつの位置付けがようわからんです。なんでも人によると「薄いのが良い」 とかいう意見を見受けますが”じゃなんなんだい!”みたいな
171 名前:デフォルトの名無しさん mailto:sage [2006/04/27(木) 00:44:03 ] おれはサービス層については、下のような用途かなあと思う。 ・業務的には複数のモデルにまたがった業務処理を一括して行うためにある。 例:発送処理 おそらく「商品」と「発送業者」と「在庫」くらいの複数のモデルが 関わる予感がする。 ・プログラム的視点では、トランザクション境界を定めるためにある。 サービス層の一つのメソッド呼び出しが1トランザクションになるようにする、 という感じで。いろんなモデルをごにょごにょした結果、裏でいろんなSQLが 走るわけだけど、それを一つのトランザクションにまとめる、という感じだろうか。
172 名前:デフォルトの名無しさん [2006/04/27(木) 00:58:31 ] > ・業務的には複数のモデルにまたがった業務処理を一括して行うためにある。 > 例:発送処理 おそらく「商品」と「発送業者」と「在庫」くらいの複数のモデルが > 関わる予感がする。 EntityやDAOの呼び出しロジックをサービスにまとめるってことで総括して良いん でしょうか。もっとシンプルに言うなら、ビジネスロジックの担当がサービスなん だっていうことなんでしょうか。
173 名前:デフォルトの名無しさん mailto:sage [2006/04/27(木) 01:12:01 ] データベースアプリを組むときには、ほとんどドメインモデルは必要ない。
174 名前:デフォルトの名無しさん mailto:sage [2006/04/27(木) 03:01:05 ] データベースアプリというのが何を指しているのかよくわからないが、 データベースを使ったアプリという意味なら、データベースを使ったアプリで ドメインモデルを使わなけりゃいつ使うのかと。
175 名前:デフォルトの名無しさん mailto:sage [2006/04/27(木) 03:23:22 ] >>172 1行目はそうだと思う。 2行目は微妙。たとえば売り上げオブジェクトの「未回収」メソッドを呼んだら 赤伝オブジェクトが生成されて、台帳オブジェクトに追加されるとしたら、 これは立派なビジネスロジックなわけだが、この処理を書くところはあくまで 「売上」オブジェクトであるべきだよな。 だって「未回収」メソッド呼んだら裏でごにょごにょやる内容が赤伝生成だったり 台帳更新だったりするわけで。 仮に台帳更新をしたらどっかの担当者にメールを送らないといけないとしても、 台帳の更新メソッドが呼ばれたら、メーラーオブジェクトの送信メソッド呼ぶように してりゃいいわけで、結局外からみれば、売上の「未回収」を呼ぶだけで台帳に 赤伝が入って担当者にメールが飛ぶ、というビジネスロジックが実行される。 だったらロジック実行には売上オブジェクトだけあればOKだよな? こんな感じで結構な数のビジネスロックはドメインモデル内で実行可能だと思う。 でも処理実行後に、たとえば現在の赤伝数とか、赤伝発行後の売上高だとか を取得して画面に返さないといけないとしたら、これはあくまでウェブアプリ ケーションの都合で実行するんであって、ビジネスロジックとは関係ない。 でも同じトランザクション内で赤伝数のカウントしたり、売上高計算したり しないといけなかったりもする。 となると、サービスとして一つのトランザクション境界としてまとめるのが 一番やりやすいかなあ、と思うな。 まあでもぶっちゃけて言うと、Springとか使うとメソッド呼び出しと応答までを トランザクション境界にする機能があって便利なんで、それを利用するためだ けにサービス用意して、サービスを呼び出したら即モデルのメソッド一つ呼んで 終わり、なんてこともある。だってプログラム的にトランザクション制御する必要な くて楽だからさあ。
176 名前:デフォルトの名無しさん mailto:sage [2006/04/27(木) 06:41:15 ] O/Rマッピング使っていると、エンティティに情報があるんだから ドメインモデルとしてロジックを書きたくなるんだけど 現在のDIコンテナは、ステートレスなトランザクションスクリプトを扱う方が便利だから そこにちょっとしたズレを感じたりしている エンティティにストラテジーをDI出来たりするO/Rマッピングツールが出たら便利そうなんだが
177 名前:デフォルトの名無しさん [2006/04/27(木) 09:26:32 ] Hibernateの遅延ロードで質問 遅延ロードのときのSet型の中身を並べ替えすることは、mappingの定義(order-byアトリビュート) でできるけど(実際、many側のデータを使った並べ替えはできた)、many側にひもづく別のクラスの データを使って並べ替える事は可能? A:B:C −> A:B=1:n B:C=n:1 Cの「並び順」フィールドの値でBを並べたい、みたいな感じ
178 名前:デフォルトの名無しさん mailto:sage [2006/04/28(金) 14:22:22 ] >>168 すんません。 参考サイトとか教えていただけないでしょうか?
179 名前:デフォルトの名無しさん mailto:sage [2006/04/29(土) 06:17:05 ] >>178 ttp://www.hibernate.org/hib_docs/v3/reference/en/html/persistent-classes.html#persistent-classes-dynamicmodels そういや、リファレンスの日本語版はいつまで経っても2.1.6のままだな
180 名前:デフォルトの名無しさん mailto:sage [2006/04/29(土) 10:31:44 ] >>179 つ「言いだしっぺ必敗の法則」 ということで翻訳よろしくww
181 名前:デフォルトの名無しさん mailto:sage [2006/04/30(日) 03:38:19 ] >>180 つ「言いだしっぺ必敗の法則」 それやると誰も何も言いださんくなるよ。 おれの前の会社がそーだったよ。
182 名前:デフォルトの名無しさん mailto:sage [2006/04/30(日) 06:43:25 ] もともとNetNews(それもfj)とかの世界で人を黙らせるための ものだからな>言いだしっぺ あれはある意味2chの対極にある世界だった。
183 名前:デフォルトの名無しさん mailto:sage [2006/05/01(月) 00:51:28 ] >>181-182 つか、冗談だからw ちゃんと"ww"つけてるじゃん。 というか、前の翻訳は誰がやったんだ?
184 名前:デフォルトの名無しさん mailto:sage [2006/05/01(月) 01:12:56 ] 最近 2ch のせいで「www」とかいうアドレスをみると 笑えてくる。
185 名前:デフォルトの名無しさん mailto:sage [2006/05/01(月) 15:15:45 ] >>184 人生楽しそうですね。
186 名前:デフォルトの名無しさん [2006/05/02(火) 19:19:08 ] OpenJPA記念カキコ incubator.apache.org/projects/open-jpa.html
187 名前:デフォルトの名無しさん [2006/05/02(火) 23:31:28 ] すいません、.NETで申し訳ないんですが、質問させて下さい。 .NETでORMに詳しい人が集まってそうなスレが見当たらなかったもので・・・。 NHibernate Best Practices with ASP.NET, Generics, and Unit Tests www.codeproject.com/aspnet/NHibernateBestPractices.asp 上のサイトのサンプルに、NHibernateでのOpenSessionInViewパターンの実装例があるのですが、 リクエスト開始時にbeginTransaction、リクエスト終了時にcommitTransactionとsessionCloseを行っています。 この作りだと、もしリクエスト中に例外が発生した場合、Transactionはどうなるのでしょうか? JavaのFilterと全く同じ仕組みが無いのでこうしてるのかとは思うのですが、これで問題が無いのかどうかがイマイチわかりません。 一応、Session管理クラスの中を見ると、commit時に例外キャッチしたらrollbackするようにはなっているんですが、 Transaction中に例外が起きた場合にcommitが成功してしまうケースってありえないんでしょうか? それともTransaction中に例外が発生した場合には、必ずcommitで例外が送出される仕組みなんでしょうか?
188 名前:デフォルトの名無しさん [2006/05/03(水) 23:31:55 ] jarファイルの中のdaoからHibernateを利用しようと考えてるんだけど マッピングxmlやhibernate.cfg.xmlって普通どこに配置するのがメジャー?
189 名前:デフォルトの名無しさん mailto:sage [2006/05/13(土) 10:40:38 ] ibatisって、jspみたいに自作のタグを使用できないのでしょうか?
190 名前:デフォルトの名無しさん mailto:sage [2006/05/13(土) 12:20:53 ] 普通にjspのカスタムタグを使えばいいんじゃないでしょうか....
191 名前:JAVA初心者 [2006/05/13(土) 23:44:13 ] こんにちは。いつもいろいろ教えてくださいましてありがとうございます。 今日はTORQUEに関する質問です。 TORQUEについて、まだ使用経験がないのですが、今度使わなくてはいけなくなりました。。。。 でも、なにせ資料が少ないので。。。。 DBの中でプライマリーキー(ここではID)の一番大きい数をしるのは そうやってやればいいでしょうか? たとえば、IDが今は10番まで使われていたとして、その10番というのを 知る方法が知りたいのです。SQLだと、SELECT MAXみたいなので GETできると思いますが。。。。。 よろしくお願いしますm__m
192 名前:191 [2006/05/13(土) 23:52:50 ] 書き忘れました。 ここから誘導されてきました。 【初心者】Java質問・相談スレッド85【大歓迎】 pc8.2ch.net/test/read.cgi/tech/1147315998/l50
193 名前:デフォルトの名無しさん mailto:sage [2006/05/15(月) 17:44:33 ] >>190 すいません。ちがいます。 sqlのxmlファイルに、ibatis用の拡張タグを使用できる仕組みになっているかを確認したかったです。
194 名前:デフォルトの名無しさん mailto:sage [2006/05/16(火) 09:57:01 ] >>193 <!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "www.ibatis.com/dtd/sql-map-2.dtd ">
195 名前:194 mailto:sage [2006/05/16(火) 10:07:24 ] 連投スマソ SqlMapClientBuilder#buildSqlMapClientに velocityを喰わせることは出来るかもね。 やったことないケド
196 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 00:40:11 ] いつも参考にさせていただいてます。 現在Javaで作成している基幹系アプリケーションで、ランタイム上で テーブルの作成・修正・削除を行う必要があります。 この場合、O/R Mapping Frameworkは向かないでしょうか? 今のところ、JavassistなどでAnnotation付きのクラスファイルを生成して、 それをHibernateのConfigurationに動的に読み込ませれば良いのでは? と考えていますが、まだ実現に至らずです。 どなたかノウハウをお持ちでしたら、ぜひ教えてくださいm(_ _)m
197 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 00:45:43 ] >>196 www.fk.urban.ne.jp/home/kishida/kouza/hibonrails.html
198 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 09:45:07 ] >>196 > ランタイム上でテーブルの作成・修正・削除 ていうか何そのキチガイ設計。 キチガイが作ったのを引き継がされたの?
199 名前:196 mailto:sage [2006/05/17(水) 22:48:44 ] お二方、回答ありがとうございます。 >>197 さん 提示していただいたリンク先の方法を確認しました。 生成したクラスコードからテーブルを自動的に生成する 必要があります。 そのため、この方法は利用できないと判断しました。 >>198 さん キチガイですいません orz まだまだ勉強が足りないと痛感してます。
200 名前:196 [2006/05/17(水) 22:49:27 ] 196です。 今回の案件では、ユーザが自由に編集できるクラスと そのオブジェクトを永続化してRDBに登録するアプリケーションを 作成します。 クラス自体の生成、修正(継承先の変更等)、削除だけでなく、 クラスのフィールドの追加、修正、削除もサポートする必要が あります。 クラスの編集によって、オブジェクトを格納するテーブルも 修正しなければいけないため、アプリケーション上で動的に テーブルを操作する方法を質問しました。 できるだけO/Rマッピングツールを使うように言われていますが、 今回の目的だと、素直に動的にSQLを生成して操作した方が 良いような気がしており、エキスパートの方々のご意見を伺おうと 思いました。 個人的には、今回の案件だと、RDBMSの種類やバージョンに よる方言を吸収して、コネクションプーリングなどを提供する ツールなら何でもいいような気もしますが、中小の下請けなので 強く言い出せません orz 乱文長文失礼しました。
201 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 23:19:26 ] ユーザがクラスを動的に生成・変更できるってことは バイトコード操作使いまくりか… 正直Javaでやるのが間違ってると思われ。いまからLispハッカー 探せ。奴らは毎日そういうことやってる。
202 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 23:20:31 ] ((((((((((((;゚Д゚))))))))))))リスリスプルプル
203 名前:デフォルトの名無しさん mailto:sage [2006/05/17(水) 23:29:43 ] >>199 データベースさえcreate文で作ってしまえばいいんじゃねぇの? そしたらあとはマッピングクラス生成してマッピングっていうのをやってくれて望みどおり
204 名前:デフォルトの名無しさん [2006/05/17(水) 23:43:52 ] クラスをシリアライズしてvarchar2(4000) くらいの列につっこむようにするとかは?
205 名前:196 mailto:sage [2006/05/18(木) 00:27:31 ] お騒がせしてます。196です。 >>201 さん すいません、>>200 の説明で、大変な御幣がありました。 >今回の案件では、ユーザが自由に編集できるクラスと >そのオブジェクトを永続化してRDBに登録するアプリケーションを >作成します。 ここで言うクラスとオブジェクトはJavaのものではなく、OWLのものでした。 先方さんは、 OWLのクラス・インスタンス ⇔ Javaのクラス・インスタンス ⇔ DB という処理を希望されています。 OWLだと、トリプルの構造をそのままテーブルに格納すれば良いと 思っていましたが、メインは検索処理でインスタンス数が多いそうで、 そのようなテーブルスキーマだと速度が出ないと判断しました。
206 名前:196 mailto:sage [2006/05/18(木) 00:37:18 ] 連投すいません。196です。 >>203 さん DDLだけConnectionを直接取得してSQLで行うことも検討しています。 このとき、対応するマッピングクラスをConfigurationに設定した場合、 既にbuildされたSessionFactoryに変更を反映する方法が分かりませんorz 独自にFactoryの実装を行えば動作しそうな気もしますが・・・ >>204 さん BLOBにシリアライズしたクラスコードとオブジェクトを挿入することも考えました。 この場合、index用のデータをテーブルの別のフィールドに格納しておけば 検索速度も上がるのかなと思いますが、保守やシステムのアップグレードが 大変そうで躊躇しています。 相変わらず長文ですいませんorz 最近謝ってばかりだ…
207 名前:デフォルトの名無しさん mailto:sage [2006/05/18(木) 00:49:24 ] OWL? Lispハッカー以上に気の狂った世界に踏み込んでるな。 漏れにはわからん世界だが、RDBMSの性能のことならわかる。 いまのPCの性能で、行数が多すぎて性能が出ないなんて 話は猛烈なレアケース。 いろいろごちゃごちゃ理由がつくんだろうが、RDBMSはごちゃごちゃ機能を つけてて、必ず対策があるようにできてる。RDBMSのマニュアル調べてみろ。
208 名前:196 mailto:sage [2006/05/18(木) 01:15:01 ] >>207 さん OWLのクラス階層の編集を可能とするため、上位クラスの変更を下位クラスにも 反映させる必要があります。 また、個々のクラスのインスタンス数は大したことはないですが、想定している インスタンス数が全体で100万のオーダーであるため、それを一つのテーブルで OWLのトリプル単位でばらして格納するよりは、クラス単位でテーブルを生成して そこに持たせた方が良いのでは、と考えました。 (複雑なデータ型の問題ももちろんあります) O/R Mapping Toolを使わずに、自前で作成した方が良いのかもしれません。 とりあえず、仕様を含めて、RDBMSをもう一度勉強しなおしてきます。 ご指摘ありがとうございました。 あぁ、今夜もクラス階層を構築している夢を見そう orz
209 名前:デフォルトの名無しさん mailto:sage [2006/05/18(木) 01:21:21 ] ところでOWLってなに? 腹がよじれた失意体前屈?
210 名前:デフォルトの名無しさん mailto:sage [2006/05/18(木) 01:56:02 ] Javaのインスタンスを生成する必要がわからん……
211 名前:デフォルトの名無しさん [2006/05/18(木) 10:39:25 ] >>205 >OWLのものでした。 BC++のObjectWindows Libraryかと思った
212 名前:デフォルトの名無しさん mailto:sage [2006/05/18(木) 13:05:54 ] >>194 本当にすいません。 タグはタグでも、<select>内に書ける<equal>などのタグです。
213 名前:デフォルトの名無しさん mailto:sage [2006/05/18(木) 13:21:17 ] >>209 巨乳巨腹のorzです。
214 名前:デフォルトの名無しさん mailto:sage [2006/05/18(木) 14:03:33 ] スキーマの緩いXML-DBを使った方がよかったりして。
215 名前:196 mailto:sage [2006/05/18(木) 22:14:30 ] >>210 さん OWLのクラスをJavaのクラスに、OWLのプロパティをJavaのクラスのフィールドに 見立てようと思っていました。 そうすると、OWLのインスタンスはJavaのフィールド値の集合で表せるかな、と。 >>211 さん OWLはWeb Ontology Languageの方です。 不注意で誤解を与えて申し訳ない。 >>214 さん 今回は検索系がメインらしいので、XML-DBだと速度面が不安です。 先方さんの話をよく聞くと、各RDBMSのSQLの方言を吸収できて、かつノウハウが 多く得られるようなミドルウェアなら何でも良さそうです。 何かの記事で読んだC-JDBCとか気になりますが、スレ違いなのでやめておきます。 皆様、お付き合いいただきありがとうございました。
216 名前:デフォルトの名無しさん mailto:sage [2006/05/18(木) 22:22:06 ] >>215 OWLってのの具体的な事は全くわからんが、 最初の3行が間違ってる気がするな。
217 名前:デフォルトの名無しさん mailto:sage [2006/05/18(木) 23:33:54 ] 性能要求が厳しいのにRDBMS依存を避けろ、か… キチガイの相手は大変だな。 おそらく全部ぐだぐだになって成果物ゼロで終わると思うが、 金はしっかり取れよ。
218 名前:196 mailto:sage [2006/05/19(金) 00:29:06 ] 196です。また来てしまい、すみません orz >>216 さん OWLのクラスとプロパティのそれぞれに、独自のAnnotationをつける仕様なので、 (1)OWLのクラスのAnnotation用テーブル (2)OWLのプロパティのAnnotation用テーブル (3)OWLのクラスとOWLのプロパティの対応情報テーブル (4)各クラスのインスタンス用テーブル(カラム名は各プロパティ名) の4種類のテーブルを作成するように設計しました。 大学出立てで経験が浅いので、どの辺がマズいかはわかりませんorz >>217 さん 汎用性と性能は両立しないのは分かっていますので、そこそこのものを提供しようと 思っています。 情報収集の最中に発見したのですが、Seasarファウンデーション傘下のTuigwaaが Hibernate使用&DDLサポートとなっていました。 ダイコン?とかよく分からないですが、参考になるかもしれないので今週末の休みに ソースを読んでみようと思います。
219 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 00:36:42 ] >>218 >OWLってのの具体的な事は全くわからんが おまえ日本語読める?
220 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 00:53:12 ] >>219 顧客がイカレてるせいで、こいつもおかしくなってるんだろう。 金だけはしっかり取れよ。
221 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 01:15:22 ] >>159 ヒルベルト変換、ヒルベルト包絡線を思い出した
222 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 01:44:03 ] 何が悪いとはっきり言うつもりはないが、もうちょっとまともに検討しないと大火災になるぞ、そのプロジェクト。
223 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 01:51:03 ] もうなってるようにしか見えないっす
224 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 02:19:36 ] LDAPとかのがまだマシなような。
225 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 10:31:23 ] 何から何まで不毛な要件で、かつゴールもなんら魅力が無いと来た。 世の中色んな案件あるんだね。
226 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 14:11:21 ] dbutils結構いいかも。
227 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 14:56:26 ] Mapに詰め込むだけでもMappingといやーMappingだが
228 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 22:42:45 ] Beanに詰めることも出来るよ。一応。
229 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 23:15:35 ] ちんこがBeanBeanでつ
230 名前:デフォルトの名無しさん mailto:sage [2006/05/19(金) 23:51:15 ] 〃∩ ∧_∧ ⊂⌒( ・ω・) はいはいわろすわろす `ヽ_っ⌒/⌒c ⌒ ⌒
231 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 13:38:21 ] Cayenneで部分読みしたいんですがどうすればわかりません。 サンプルが落ちているところをご存知の方いませんか?
232 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 19:56:18 ] >>231 SelectQueryのsetPageSize()じゃ用途に合わないのかな? Cayenneのページにサンプルがあるよ。 ttp://www.objectstyle.org/cayenne/userguide/perform/paged-queries.html
233 名前:231 [2006/05/29(月) 11:43:03 ] >>232 サンクス 見てみます。
234 名前:デフォルトの名無しさん [2006/05/31(水) 14:58:57 ] 参照系だけの場合、HibernateとJDBC直書きとどっちがパフォーマンスいいですか? キャッシュの設定によってはHibernateのが早かったりする?
235 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 19:46:51 ] ストアド化しろ
236 名前:デフォルトの名無しさん mailto:sage [2006/05/31(水) 22:47:03 ] つうか素でHibernateのほうが速いだろ。
237 名前:デフォルトの名無しさん mailto:sage [2006/06/01(木) 01:50:11 ] それはほとんどない。
238 名前:デフォルトの名無しさん mailto:sage [2006/06/01(木) 22:10:42 ] どういう設定をしたら参照がJDBCより遅くなるのかと。あらゆる局面で lazyオフでキャッシュなしか?
239 名前:デフォルトの名無しさん mailto:sage [2006/06/01(木) 22:27:56 ] >>238 いくつかは考えられるだろ。 ・最初の一回目の検索の場合(Hibernateが該当するオブジェクトをまだロードしていない状態) ・ストアドプロシージャを呼び出す場合(Javaアプリ側でなんとかするより、ストアド使った方が速い場合が多い)
240 名前:234 mailto:sage [2006/06/03(土) 00:48:56 ] みなさんレスありがとうございます。 ちなみに、バッチ処理で1回のみですがテーブル全件舐めたりします。 1回きりの場合だとHibernate導入するメリット無さそうですね・・・(パフォーマンス面で)。 ストアドである程度書いてJDBCで呼ぶってのが理想的みたいですが、ストアドで作るとメンテできん!って怒られます。 バッチでストアド無しでパフォーマンス高くする手ってなんかないですかね〜・・・。
241 名前:デフォルトの名無しさん mailto:sage [2006/06/03(土) 11:17:37 ] バッチ処理でHibernateを利用する理由はほとんど無いな。
242 名前:デフォルトの名無しさん mailto:sage [2006/06/03(土) 15:39:34 ] O/R-Mappingでやってることって、結局 ・バックグラウンドでSQLを作って投げる ・返ってきたresultsetをbeanに自動的にマッピングしてcollectionに詰めて返す が本質だよね? そう考えると、DbUtilとかでも十分なのかな。。。 うちの会社、こういう新しい?技術とかの導入に消極的だし、 新しい知識を積極的に勉強しようっていう技術者も少ない。。。 個人的にはiBATISあたりがよさげなんですが、使ってる人いますか?
243 名前:デフォルトの名無しさん [2006/06/03(土) 16:15:01 ] キャッシュとか遅延ロードが主なメリットじゃない?
244 名前:デフォルトの名無しさん mailto:sage [2006/06/03(土) 16:38:13 ] 関連テーブルの紐付けが嬉しい。
245 名前:デフォルトの名無しさん [2006/06/03(土) 16:46:05 ] 今一これの利点が分からないんだけど いちいちXMLとかに定義しないと使えないわけ? extends MySQLObjectとかしてささっとプロパティだけで完結して欲しい。
246 名前:デフォルトの名無しさん mailto:sage [2006/06/03(土) 17:12:28 ] >>242 関連テーブルを自動的に取ってきてくれるという重要な機能が あるでしょ(これはDbUtilにはない)。
247 名前:デフォルトの名無しさん mailto:sage [2006/06/03(土) 17:15:40 ] >>245 つ 無定義Hibernate ttp://www.fk.urban.ne.jp/home/kishida/kouza/hibonrails.html 俺の場合はCayenneを使ってDBのDDL作成とマッピング定義作成を Cayenne Modelerで同時にやっちゃうので、ORマッパーを使ったからと いってそんなに負荷は変わらない感じ。
248 名前:デフォルトの名無しさん mailto:sage [2006/06/03(土) 17:25:55 ] 最近はどこのO/Rマッパーもテーブルからのクラス自動生成機能持ってる JPA使えばXMLファイルはもういらない
249 名前:デフォルトの名無しさん mailto:sage [2006/06/03(土) 17:33:59 ] >>247 ふーん。いいね、組み込みDBとかで気軽に永続化できるようになると ゲームとかも作りやすくなっていいかなぁ
250 名前:デフォルトの名無しさん mailto:sage [2006/06/03(土) 19:05:00 ] >>245 MiddlegenでもXDocletでも、Hibernate Annotationでも、好きなの使え。
251 名前:デフォルトの名無しさん mailto:sage [2006/06/08(木) 22:05:18 ] JPAの解説記事少ないなあ。 みんなxmlでしこしこやってるの?
252 名前:デフォルトの名無しさん mailto:sage [2006/06/08(木) 23:30:24 ] >>240 いまPro EJB3を読んでるところだと思われ。 でもなんでそこでxmlが出てくるのかわからない。
253 名前:デフォルトの名無しさん mailto:sage [2006/06/09(金) 10:14:29 ] >>251 Java Persistence APIってなんなの?
254 名前:デフォルトの名無しさん mailto:sage [2006/06/09(金) 10:26:06 ] ORまっぱの仕様
255 名前:デフォルトの名無しさん mailto:sage [2006/06/09(金) 11:20:29 ] >>254 jspタグライブラリでも使用できるらしいけど。 ってことは、jspでDBアクセス用ってことか・・・。不要じゃん
256 名前:デフォルトの名無しさん [2006/06/09(金) 16:54:17 ] それはJPAを使うタグライブラリのこと JPAの仕様とは関係ない JPAは、HibernateやTopLinkを元にしたO/Rマッピングの標準仕様のこと
257 名前:デフォルトの名無しさん mailto:sage [2006/06/10(土) 18:42:38 ] >>255 JSPタグライブラリにJDBCタグライブラリがあるが、JDBCはJSPでDBアクセス用か?
258 名前:デフォルトの名無しさん mailto:sage [2006/06/10(土) 20:18:24 ] そう。
259 名前:デフォルトの名無しさん mailto:sage [2006/06/11(日) 13:51:28 ] アホな流れになってるな。 子供か!!
260 名前:デフォルトの名無しさん mailto:sage [2006/06/11(日) 16:52:36 ] そう。
261 名前:デフォルトの名無しさん [2006/06/13(火) 22:09:47 ] Hibernate2xで関連テーブル使ってmany-to-manyでマッピングしてる時、bagとかのwhere属性で関連先のテーブルのカラムに対する条件って書けますか? 普通にカラム名と条件書くと関連テーブルにそんなカラムねーよ!!って怒られちゃうんですが・・・。
262 名前:デフォルトの名無しさん mailto:sage [2006/06/14(水) 07:18:09 ] 能動的にコーディングできるってだけで、O/Rマッパーはチューニングに向いてないんだな
263 名前:デフォルトの名無しさん mailto:sage [2006/06/14(水) 09:18:08 ] 少なくとも、困ったときに直にSQL書いて実行できるようなフレームワークじゃないと、 使えないなあというか使うの怖いなあ。 まあそのときだけJDBC使えって話はあるけど。
264 名前:デフォルトの名無しさん mailto:sage [2006/06/14(水) 10:19:43 ] Hibernateは問題ないな。
265 名前:デフォルトの名無しさん mailto:sage [2006/06/14(水) 10:26:34 ] >>263 ibatis
266 名前:デフォルトの名無しさん mailto:sage [2006/06/14(水) 11:37:06 ] でも直に書けるフレームワークは、普段から直に書く様に成って、後で困る罠。
267 名前:デフォルトの名無しさん mailto:sage [2006/06/14(水) 17:14:33 ] >>266 そういう開発者、いそうだね。特に新規に導入するとき、わからない→直書きってされそう
268 名前:デフォルトの名無しさん mailto:sage [2006/06/14(水) 23:34:39 ] でもハマった時の最後の手段として、SQLとかJDBC APIとかとも上手く連携してくれるのがいいなぁ。 プログラマとしては逃げたくなくても、サラリーマンとしてそういう手段に逃げちゃう時が多々あるんで・・・・・・。
269 名前:デフォルトの名無しさん [2006/06/17(土) 11:50:26 ] Hibernate3とEJB3、これから作るシステムに入れるならどっちがおすすめ?
270 名前:デフォルトの名無しさん mailto:sage [2006/06/17(土) 11:51:43 ] 今までどおりの使い分け
271 名前:デフォルトの名無しさん mailto:sage [2006/06/17(土) 11:57:00 ] ゲームで使えそうなORMはHibernateくらいかい?組み込みたいのでオススメを聞きたい
272 名前:デフォルトの名無しさん mailto:sage [2006/06/17(土) 14:51:30 ] >>269 EJB3を使ってJPAの実装としてHibernateを利用
273 名前:デフォルトの名無しさん mailto:sage [2006/06/17(土) 14:52:33 ] >>271 つうか、これからはJPAという標準になるんだから、ゲームで使うくらいならTopLinkもHibernateも大差なかろう。
274 名前:269 mailto:sage [2006/06/18(日) 01:32:50 ] >>270 今までEJBって使った事ないんですが、使い分けってどんな基準ですか? >>272 なるほどー。 使い分けってよりJPAの実装としてHibernateを選択って感じなんですね。
275 名前:デフォルトの名無しさん mailto:sage [2006/06/18(日) 02:45:06 ] >>274 いままで使ってなかったのはEJB2 EJB3とは別物。 ORマッピング使うなら、EJB3で十分。 実質的にはHibernateの仕様がEJB3になったわけだから、EJB3とHibernateをどう使い分けるかということが、そもそもナンセンスということになる。
276 名前:デフォルトの名無しさん mailto:sage [2006/06/18(日) 02:57:00 ] >>275 リモートで呼び出せるかどうかのみ違う。 使い分けはそこだけかな。
277 名前:デフォルトの名無しさん mailto:sage [2006/06/18(日) 03:02:14 ] JPA仕様とそれぞれのORマッパーって結構違うんじゃない? Hibernateについては同感だけど。 たとえばCayenneもJPAをサポートするといって準備しているけど、Cayenneの 発想とJPA(Hibernate)のやり方(というか考え方)って結構違うように思う。特に トランザクションを意識させない設計とか、どうすんだろ、と思う。 TopLink(Grassfishに組み込みのやつ)とかはどうなんだろうか。
278 名前:275 mailto:sage [2006/06/18(日) 03:47:22 ] >>277 HibernateもCriteriaとかProjectionとかがEJB3に取り入れられてなくて残念なんだけど、ORマッピングのプログラムインタフェースの部分だけを見ればJPA準拠ならHibernate互換ということになるんじゃないかな、と思ってます。
279 名前:275 mailto:sage [2006/06/18(日) 03:53:08 ] >>277 重箱の隅だけど、GlassFishね。草みたいな魚じゃなくて、ガラスみたいな魚。 TopLinkは、JPAの実装として使う限りでは、個性を感じない。 もちろん、どのJPA実装も、JPAの実装として使う限りでは個性を感じないというのは当たり前の話ではあるんだけど。
280 名前:デフォルトの名無しさん mailto:sage [2006/06/18(日) 05:50:23 ] パフォーマンスの差とかあるのかな?
281 名前:275 mailto:sage [2006/06/18(日) 08:08:21 ] それぞれの固有の機能を使わない限りは、無視できるほどの違いしかないと思う。 でも実測値がほしかったら、実サーバーで確認するのんが確実
282 名前:デフォルトの名無しさん mailto:sage [2006/07/03(月) 23:13:24 ] Hibernateが特許侵害だとよ。 ttp://japan.cnet.com/news/ent/story/0,2000056022,20157827,00.htm >テキサス州の連邦地方裁判所に今週提出された訴状によると、 >原告のFireStar Softwareは、JBossのHibernate 3.0が同社の >「オブジェクト指向ソフトウェアを用いた、リレーショナルデータベースの >リンクに関する特許」を侵害していると主張しているという。
283 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 01:49:42 ] >>282 特許侵害しているとして訴えられただけだろう。 まだまだ一方的な主張の段階。 「特許侵害だとよ。」は風説の流布に当たるおそれがあるから注意。 断定は判決が出てからに汁。 よくあるアメリカ流のふっかけ・ゆすりと推測してみる。 うまく行けば和解金ふんだくれるもんな。
284 名前:デフォルトの名無しさん [2006/07/04(火) 21:10:50 ] 時給1000円でJava教えてくださるかたを募集します 場所 所沢(池袋・高田馬場から直通) i−want−to−study−java@hotmail.co.jp (アドレスは全角で書いてあるので半角に直してください) よろしくおねがいします
285 名前:デフォルトの名無しさん mailto:sage [2006/07/04(火) 23:56:57 ] >>281 すでに「おい、そのころには既にEOFがあったわけだが。 そのEOFにすら先行技術があるんだが?」と冷静なツッコミが 入っとるよ。
286 名前:デフォルトの名無しさん mailto:sage [2006/07/05(水) 05:13:30 ] BerkeleyDB Java Editionつかってます
287 名前:285 mailto:sage [2006/07/05(水) 09:03:31 ] アンカーミスった。 >>282 だった。
288 名前:デフォルトの名無しさん mailto:sage [2006/07/10(月) 22:01:42 ] SimpleORM www.simpleorm.org/whitepaper.html whitepaperを眺めてみたらいい感じ。 クラスに定義したメタデータからテーブルを作ったりできるらしい。 新規開発にしか向かないかな?
289 名前:デフォルトの名無しさん [2006/07/17(月) 21:22:59 ] 教える対象は超初心者です。 専門学校などでJavaを勉強されていて夏休みだけ教えたいという方も歓迎です
290 名前:284 [2006/07/17(月) 21:28:22 ] 教える対象は超初心者です。 専門学校などでJavaを勉強されていて夏休みだけ教えたいという方も歓迎です
291 名前:284 mailto:i-want-to-study-java@hotmail.co.jp [2006/07/17(月) 21:46:20 ] いきなり缶詰ー>架空請求スパムの送信
292 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 01:36:11 ] 亜米利加の特許は先発明制だから、いくらでも先行特許あるよ。
293 名前:デフォルトの名無しさん [2006/07/18(火) 03:38:48 ] >>290 = >>291 自分でマルチして、自分で突っ込んでる
294 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 18:28:56 ] HibernateのHQLで select sum(*) の返り値を IntegerじゃなくてLongで取得したいのですが、いったいどうすれば…
295 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 20:19:24 ] >>293 IDも出ない板でよく言うよ
296 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 01:07:07 ] >>294 ttp://opensource.atlassian.com/projects/hibernate/browse/HHH-1538 3.2での対応になる
297 名前:デフォルトの名無しさん mailto:sage [2006/07/19(水) 02:32:50 ] >>296 ありがとうございます 丸一日、試行錯誤してしまいましたが 3.2.CR2入れることにします…
298 名前:デフォルトの名無しさん mailto:sage [2006/07/22(土) 09:36:29 ] 知らぬ間にこんなの追加されていた。 アノテーションにSQLを書くみたいだが。 ttp://download.java.net/jdk6/docs/api/java/sql/DataSet.html
299 名前:デフォルトの名無しさん mailto:sage [2006/07/22(土) 11:01:44 ] BeehiveのJDBC Controlみたいな感じか。
300 名前:デフォルトの名無しさん [2006/07/23(日) 02:09:26 ] 俺も同じようなコンセプトの Object/SQL mapper を作っているのだけれど、標準に搭載されるようじゃ用無しだなこりゃ。アハハ こういうのなんだけどさ。 @SQL(value = "SELECT * FROM dept", bean = Dept.class) public abstract List<Dept> readAll(); @SQL(value = { "UPDATE emp SET salary = salary - {#arg[2]} WHERE id = {#arg[0].id}", "UPDATE emp SET salary = salary + {#arg[2]} WHERE id = {#arg[1].id}", }, type = TYPE.UPDATE ) public abstract void moveSalary(Emp from, Emp to, int price); 完成したら公開しようと思っていたのだけれど、微調整したら公開しちゃおう。エヘヘ
301 名前:デフォルトの名無しさん mailto:sage [2006/07/23(日) 09:05:28 ] >>300 標準のは、CachedRowSetを使っていて、CachedRowSetはJDBCドライバの対応が 必要だから、存在価値としてないわけじゃないと思うけどね。 しかし、どうせなら誰か.NETのDataSetをそのまま実装して欲しいな。 NinjaVAが実装しているけど、DataSetのソースが5000ステップくらいあるのと 微妙に違うので、いまいち使いづらい。
302 名前:デフォルトの名無しさん mailto:sage [2006/07/26(水) 23:40:17 ] >>300 公開期待してます。
303 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 00:40:27 ] Hibernate Annotationで質問があります。 簡単なサンプルを作成して実行してみたところ以下のようなエラーが出ました。 Exception in thread "main" org.hibernate.MappingException: Unknown entity: sample.Employee そこでhibernate.cfg.xmlから<mapping package="sample"/>と<mapping class="sample.Employee"/> のタグを削除してnew AnnotationConfiguration().configure().addClass(Employee.class)と したところ問題なく実行できました。 この場合どこが悪くて最初の方法で実行できなかったのでしょうか 使用したライブラリのバージョンは下のやつです。 hibernate-3.2 hibernate-annotations-3.2.0.CR1
304 名前:300 [2006/07/28(金) 01:33:19 ] とりあえずサンプルをちゃんと動くようにして、上げました。 BSD License です。 sourceforge.jp/projects/crudfactory/ すいません、ドキュメントが一切ないです。サンプルのソースを見て下さい。 ognlとcglibが必要です。 こちらでは以下のバージョンで動かしています。他で動くかはわからないです。 サンプルを動かすには hsqldb が必要です。1.8.0 を使っています。 cglib-nodep-2.1_3.jar ognl-2.6.7.jar まだ無い機能、やってないこと ログを取る機能 しっかりしたエラー処理 HSQLDB以外での動作確認 ドキュメントを書く もっとしっかりしたサンプルを書く ソース内のコメント SQLの中の {#arg[0]} の部分。ここの {} の中に ognl が記述できます。methodの引数が arg という配列に入ってます。
305 名前:300 [2006/07/28(金) 01:43:02 ] 補足事項 hsqldbで CREATE TABLE dept ( id INTEGER NOT NULL IDENTITY, name VARCHAR NOT NULL, PRIMARY KEY(id) ); としていて、 INSERT INTO dept (name) VALUES ('name'); としたら、id列に値が自動で入ります。 この時id列に入った値を、取り出してbeanにセットしようとしています。 id列に入った値を取り出す方法が、RDBMSによってマチマチ?なようです。 で、とりあえず、SQLアノテーションのtypeというパラメータで使い分けるようにして、 INSERTした直後にCALL IDENTITY()とやって、その値をセットする方法を、CREATE_IDENTITY PreparedStatementでINSERTしたあと、PreparedStatement#getGeneratedKeysする方法を、CREATE_GENERATE INSERTしっぱなしでbeanに値を入れるのを放棄する方法を、CREATE としてますので、使う人は使いわけて下さい。 IDENTITYを設定した列が2コあったらどうなるんだ?とか、まとまり切っていませんので。
306 名前:300 mailto:sage [2006/07/28(金) 01:44:30 ] 始めてオープンソースでソフトを公開しました。 ドキドキしています。
307 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 01:54:41 ] 早速パクって儲けさせていただきました。無料で公開してくれてありがとう。
308 名前:デフォルトの名無しさん mailto:sage [2006/07/28(金) 08:15:21 ] >>304 乙! と思って、早速いろんなDBで動作確認…と思ったら、 リリース物件もソースコードリポジトリも空っぽですよ?
309 名前:300 mailto:sage [2006/07/28(金) 08:23:51 ] 俺のアカウントからなら見られるのに…… 俺sf.jpの使い方わかってないぽいので、しばしお待ちを…… スレ汚してすいません。
310 名前:デフォルトの名無しさん [2006/07/28(金) 09:41:06 ] >>300 頑張れ。君に期待している。
311 名前:デフォルトの名無しさん mailto:sage [2006/07/29(土) 00:47:50 ] >>300 私も期待しています。 頑張ってください。
312 名前:デフォルトの名無しさん mailto:sage [2006/07/29(土) 01:58:50 ] >>308 DL出来るようになってるみたいだね
313 名前:デフォルトの名無しさん mailto:sage [2006/07/30(日) 04:53:44 ] sfはリリースしてから実際にDLできるまでにラグがあるらしい
314 名前:ストーカー [2006/08/03(木) 01:49:49 ] crudfactory.sourceforge.jp/tutorial.html こんなんできてるYO!
315 名前:デフォルトの名無しさん mailto:sage [2006/08/03(木) 11:29:37 ] メモリに入りきらないぐらいの巨大なテーブルをSELECTして、一件ずつ処理したいと思っています。 Hibernateを使おうかと考えていますが、ネットの入門を見ている限りSELECTした結果を一気に取得しているようです。 全件一気にオブジェクト化するとメモリが足りなさそうなのですが、こういう用途はJDBC使って1件ずつ取り出した方が良いんでしょうか?
316 名前:デフォルトの名無しさん mailto:sage [2006/08/03(木) 11:56:03 ] 1件ごとにSELECTすると効率が悪いから 何十件かまとめてSELECTするよろし。 それにそもそも、巨大なテーブルを全部変更するなら ストアドプロシージャのほうが圧倒的に効率がいい。
317 名前:315 mailto:sage [2006/08/03(木) 12:48:31 ] 書き方が悪かったですね、申し訳ないです。 SELECT * FROM TABLEして全件取得して、ResultSet.next()で1件ずつ処理したいって事なんです。 Hibernateの入門ページ見てると、検索結果がListで一気に戻ってきているようだったので。 つまり聞きたいのは、検索結果全件を一気にオブジェクト化するとメモリが足りないので、 検索結果全件の中から1件ずつオブジェクト化して処理できないかな?って事です。 ListのgetやIteratorのnext時にオブジェクト化されていたら問題なさそうなんですか。 って書いてたら聞くより本なり読んでちゃんと理解してから判断した方がいい気がしてきた・・・。
318 名前:デフォルトの名無しさん mailto:sage [2006/08/03(木) 13:24:03 ] >>713 素のJDBCだと 一方向に読み込み専用 で取得すると 一気には取ってこないみたいだね
319 名前:315 mailto:sage [2006/08/03(木) 16:36:42 ] >>318 それをO/RマッピングでやってみたいんですがやっぱJDBC使わないとダメなんでしょうかね。 ふむむ、できないとしたら分割してSELECTするなり工夫が必要かぁ・・・。
320 名前:デフォルトの名無しさん mailto:sage [2006/08/03(木) 16:52:08 ] >>315 Hibernate使ったこと無いけど、lazy initializationを有効にすると 取得したコレクションからオブジェクトを取得するときまで インスタンス化を遅らせることができるそうだ。 ttp://www.hibernate.org/hib_docs/reference/ja/html/collections.html#collections-lazy つうかドキュメント読め。
321 名前:315 mailto:sage [2006/08/03(木) 17:14:37 ] >>320 おお、良い感じですね。 問題はいらなくなった読み込み後のオブジェクトがちゃんとゴミ掃除されるかどうかだけど・・・とりあえずいろいろ読んでみます。 dクス!!
322 名前:デフォルトの名無しさん mailto:sage [2006/08/07(月) 18:33:15 ] Beanて、テーブル毎に一つ作るものでしょうか? INSERT目的なら全カラム必要になるだろうけど、 SELECT目的なら一部のカラムのみで十分なケースってあると思うんです。 例: BOOKというテーブルはID、名前、著者名、カテゴリ情報、概要等、 本に関する情報を多数持っているが、 検索結果に表示するのは名前だけで十分、という場合。 この時ID、名前以外の情報まで持ってくるのは非効率な気がするのですが、 このSELECT目的に別にBeanクラスを定義するというのはアリでしょうか。 class Book { 全カラム } class BookForSearchResult { ID, 名前 } それとも、この程度の効率はO/Rマッピングを使用する以上、 気にしない方がいいんでしょうか。
323 名前:デフォルトの名無しさん mailto:sage [2006/08/07(月) 19:15:38 ] >>322 どうしても気になるのなら、IDと名前だけのビューを作って、 そのビューとBeanをマッピングしたらどうでしょう?
324 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 01:42:02 ] hibernate使ってたけどいろいろ面倒くさくなってきたのでCommonsDbUtilsに戻してしまった。 なんかすがすがしい気分になった。
325 名前:322 mailto:sage [2006/08/08(火) 11:09:26 ] >>323 なるほど、ビューを対象にするなら違和感ないですね。 カラムを限定するようなケースが発生するのは大概検索画面なので、 わざわざビューを作る、というのもアリが気がします。 ありがとうございます。
326 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 19:12:24 ] OJB 1.0.4を利用しようと思ってソースとバイナリを取ってきて 動かそうとしているのですが、junit test suiteがFailureを出します。 WinXP (SP1) JDK 1.5.0_06 lib等は、 antは1.6.5を別途導入。junit.jarはojb1.0.4のをcopy DBはデフォルトのhsqldb (入手したママ) でるFailure (1件のみ) testReportPathExpressionForExtent2 check size expected:<2> but was:<0> (その他実行結果のファイルにはNOT_EXISTテーブルがないとかもでている) OJBのドキュメント等やMLも読んだのですが、junit testについては (hsqldb)についてはそのまま動くとのことで、どう修正すれば 動かせるのかどうかわからなくて困っています。 ここでいいのかどうかわからないのですが、よろしくお願いします。
327 名前:デフォルトの名無しさん mailto:sage [2006/08/09(水) 00:20:58 ] まだ見てるかわからんが、HibernateならScrollableResultsがある。 ResultSetと同じようなカーソル的な使い方ができるので、 適度にevict()しながら処理すればいいと思われ。
328 名前:デフォルトの名無しさん mailto:sage [2006/08/17(木) 18:09:46 ] 正直O/Rまっぱーの利点がわからん。 簡単な表結合ならSQL書いちゃったほうが早いし 難しい表結合はO/Rまっぱーじゃ結局無理だし。 なにがいいのか俺にもわかるように説明してくれ。 DTO自動で作るだけならエクセルマクロで十分だし。
329 名前:デフォルトの名無しさん mailto:sage [2006/08/17(木) 18:22:18 ] そのエクセルマクロ生成コードにむかついた人が張り切ってしまって できたのがO/Rマッパー。 むかつかない人はそのままでいいよ。
330 名前:デフォルトの名無しさん mailto:sage [2006/08/17(木) 18:29:30 ] >簡単な表結合ならSQL書いちゃったほうが早いし ORMの利点は、「SQLを書かなくていい」ではない。 >DTO自動で作るだけならエクセルマクロで十分だし。 それを「車輪の再発明」と言う。 ダメエンジニアが行う愚行の一つ。
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