- 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以降
- 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行が間違ってる気がするな。
|

|