2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

Java⇔RDBのMapping-Frameworkを語るスレ Vol.4

1 :デフォルトの名無しさん: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以降


115 :デフォルトの名無しさん:2006/03/05(日) 12:05:08
>>114
DBごとの駄目文字を上手いこと自動変換してくれるか、ってこと??

116 :デフォルトの名無しさん:2006/03/05(日) 12:14:13
>>115
狭い意味だと文字列末尾の'\0'を取り去ることだけになっちゃうね。
広い意味だといくらでもひろがっちゃうし。
>>114
というわけで、どこまで考えてるのかを、お願い。

117 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/03/06(月) 20:01:57
>>119
スレタイ読んで出直してくださいね。どこでも質問すればいいってもんじゃないです。

121 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/03/09(木) 09:57:53
ibatisのタイプハンドラには、String[]は型として使用できないのでしょうか。

124 :http://www.vector.co.jp/soft/win95/util/se072729.html:2006/03/18(土) 22:04:51
TextSS のWindowsXP(Professional)64bit対応化おながいします

もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?

そういや64bitにネイティブ対応している2chブラウザてありましたっけ?



125 :デフォルトの名無しさん:2006/03/18(土) 22:41:29
>>124
あちこちにマルチ乙

126 :デフォルトの名無しさん:2006/03/19(日) 08:50:46
hibernateを使おうと考えています。
既存のマスタが論理削除で管理されている場合、
論理削除チェックはどこでやるもんなんでしょう?

127 :デフォルトの名無しさん:2006/03/23(木) 23:23:50
当方マカーです(ごめんなさい)
Hibernate3を使い始めたんですが、hbmを作るのが面倒です(PostgreSQLでテーブル100個ぐらいある)。
eclipseにプラグインを入れてもエラーで墜ちまくるので実用的じゃなさそうです。
eclipse以外に、PureJavaでつくられたツールとかでテーブルを観て自動的にHibernate3用のhbmをつくってくれるものありませんか。


128 :デフォルトの名無しさん:2006/03/24(金) 11:12:39
マカーって自己紹介の意味が分からんし謝る意味も分からんがw

http://www.hibernate.org/hib_docs/tools/reference/en/html_single/#ant
これはどうですか

129 :デフォルトの名無しさん:2006/03/24(金) 15:24:35
マカ
ttp://www.associe-net.co.jp/maca/

130 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/04/07(金) 00:34:01
HibernateでDTOパターンを使い、更に排他制御を行いたい場合
バージョンカラムを含めた形でDTOに値をコピーし、
更新時に再びDTOから永続化クラスに詰め直してupdateする・・・という手順でいいの?
遅延ロードを設定していて、値を取得していない関連オブジェクトがフィールドにある場合、どう扱ったらいいのだろうか?

132 :デフォルトの名無しさん:2006/04/09(日) 12:42:56
今頃なんだけど、OpenSessionInViewってどうなのかな?

個人的にはDAOから取り出したオブジェクトはDBから縁が切れていてほしい
んだよね。なんかJSPで画面出してるときに、ここでDBになんかあったらど
うしようとか考えるのが気持ち悪いというか。

とはいえDAOで似たような中身のオブジェクトに詰め直すというのも冗長だし。
みんなどうしてるの?


133 :デフォルトの名無しさん:2006/04/09(日) 13:16:57
リクエストのたびにhibernateのSessionつくってフェラチオして
そのあとSessionをすぐにクローズしてる。Sessionはなるべく短く、短く。

134 :デフォルトの名無しさん:2006/04/09(日) 13:18:02
すまん、フェラチオ→フェッチ だ orz

135 :デフォルトの名無しさん:2006/04/09(日) 14:10:17
>>133-134
 ( ゚д゚)
_(__つ/ ̄ ̄ ̄/_ 
  \/    /
     ̄ ̄ ̄
 
  ( ゚д゚ )
_(__つ/ ̄ ̄ ̄/_ 
  \/    /
     ̄ ̄ ̄
 
  ( ゚∀゚ )アーッヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャ
_(__つ/ ̄ ̄ ̄/_ 
  \/    /
     ̄ ̄ ̄



136 :デフォルトの名無しさん:2006/04/09(日) 17:30:03
>>133
お茶噴いた

137 :デフォルトの名無しさん:2006/04/09(日) 19:08:21
相当短いんだろうな

138 :133:2006/04/09(日) 21:22:50
すまねぇなぁ(;´д`)
フェまで入力してATOKだとtabで自動変換するからそのままreturnおしたのさorz
普段どういう文章打っているかがバレバレだぜ〜


139 :デフォルトの名無しさん:2006/04/09(日) 22:29:35
短く、短く

140 :デフォルトの名無しさん:2006/04/09(日) 23:29:17
今はかってみたら16cmだった。ふつう?

141 :デフォルトの名無しさん:2006/04/10(月) 00:03:50
>>140
日本人としてはちょっと長めらしい・・・。


なんて話はさておき、
Hibernateでは主キーがないテーブルのマッピングはできないんだな。
まあ当然なんだろうけど・・・。

142 :デフォルトの名無しさん:2006/04/10(月) 06:58:11
Hibernateフェチ

143 :デフォルトの名無しさん:2006/04/10(月) 11:21:34
>>140
うちのダンナよりは長いよ

144 :デフォルトの名無しさん:2006/04/10(月) 13:38:04
>>133
てめえ人様の腹を捩らすとは何事だゴルァ


145 :デフォルトの名無しさん:2006/04/10(月) 13:39:15
>>140
お前金持ちだろ。
ピーナッツ食いまくって水ばっか飲んでるだろ。
それにオナニー回数も少なめだな?

チンポの長さと将来成功することと何か関係があるらしいぞw


146 :デフォルトの名無しさん:2006/04/10(月) 14:04:55
>>140が使った道具

アンドロペニス 男性器増大医療器具 送料無料
http://www.liquidsky.co.jp/


147 :132:2006/04/10(月) 18:02:27
少しはまじめな話題を振ったつもりだったのに
133のバカチンコのおかげで……orz


148 :デフォルトの名無しさん: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:2006/04/14(金) 21:56:30
DBのデータ件数が少ない場合、別にPreparedStatementでも
そこまで実行速度的に変わらんので、SQL直書きでもいいかな、と。

いちお、SSQLLibってのがあるらしい。
結局(PL/SQLだと)自分でResultSetをBeanにマッピングしないとダメか・・・。

StoredProcedureとBeanのマッピングってHibernateでもムリなん?
Hibernate使ったこと無いので。

>>133
(*^ー゚)b グッジョブ!!


153 :デフォルトの名無しさん:2006/04/14(金) 23:29:58
(133の次のナチュラルな下ネタを待っているのはオレだけすか?)


154 :デフォルトの名無しさん: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 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/04/25(火) 23:38:41
>>158
ひべるなーて

160 :デフォルトの名無しさん:2006/04/25(火) 23:50:59
>>158
はいばーねいと、でいいんじゃないの?

161 :デフォルトの名無しさん:2006/04/26(水) 00:59:50
冬眠って読むんだよ

162 :デフォルトの名無しさん:2006/04/26(水) 14:39:18
>158
はぁい、ばーねいと! (やあ、ばーねいと)

あい、ばーてぃす!(いいえ、わたしはばーてぃすです。)


163 :デフォルトの名無しさん:2006/04/26(水) 14:48:17
カイ! エ〜ン ・゚・(ノД`)・゚・

164 :デフォルトの名無しさん:2006/04/26(水) 14:52:21
ハーイバネット、ハーイバネットぉ〜♪ 夢のハイバーネットたかたぁ〜♪

165 :デフォルトの名無しさん:2006/04/26(水) 19:14:12
Hibernateって、マッピングするときBean指定しないとダメなんですか。
ibatisではHashMapが使用できて、key=カラム名、value=値 で取得可能なのですが。

166 :デフォルトの名無しさん:2006/04/26(水) 22:16:20
いや別にMapが欲しいだけならDbUtilだけでいいんだし....

167 :デフォルトの名無しさん:2006/04/26(水) 23:13:32
だれかJavaドメインモデルの実践的な実装を解説した書籍を教えてください。
サービス、ドメイン、DTO、エンティティなど単語はよく聞きますがUML
図ばっかりの本がおおくて実際のソースコードで実感できるものを見たことが
無いので。。。

168 :デフォルトの名無しさん:2006/04/26(水) 23:47:32
>>165
Mapでも取得可能。DOMのElementに値を詰めて返すことも出来る

169 :デフォルトの名無しさん:2006/04/27(木) 00:02:01
ドメインモデルって難しい言葉を意識するから難しく感じるんであって、
要するにあれって「ただのまっとうなオブジェクト」ってことなんじゃないの?

「USERテーブルの行をロードしたデータ」じゃなくて、「ユーザー」という
「もの」を表したオブジェクトって考えようよ、というのがドメインモデルの
ベースにあるところじゃないかと。

オブジェクトだと考えたら、「ユーザーの登録を抹消する」なら「じゃあ
unregisterメソッドを読んだら抹消するってことで」と自然に思うじゃん。
裏でどんなSQL投げようが、ファイル読もうがセッションをごにょごにょ
しようが、抹消してくれればしったこっちゃないでしょう。それがオブジェ
クト指向ってもんだ。

DBを前提に考えちゃうと「ユーザを抹消するってことは、まず関連付けられた
契約レコードをすべて抹消したあと、ステータスをごにょごぎょして、
ユーザーのレコードの削除フラグをオン。それを効率良くするには、関連
レコードをジョインして....」とか考えてしまって、それをそのままべたっと
コードに書いてしまいがち。

オブジェクト指向的には、ユーザーというオブジェクトの「抹消」という
命令を呼び出したら勝手にごにょごにょして抹消してくれりゃいいわけ
で、その抹消メソッドが裏で勝手に契約レコードを抹消してステータス
変更してくれりゃいいじゃん、それがオブジェクトってもんだろ?

契約だってオブジェクトなんだから、ユーザーオブジェクトの抹消メソッド
のなかで、契約オブジェクトの契約解除メソッドよべばいいじゃん。

ってのがドメインモデルじゃないかな。

↓さあ景気良くいこう

170 :デフォルトの名無しさん:2006/04/27(木) 00:16:08
> ドメインモデルって難しい言葉を意識するから難しく感じるんであって、
> 要するにあれって「ただのまっとうなオブジェクト」ってことなんじゃないの?

おそらくそういうことなんだろうな〜とは思ってるんですが、「サービス」とか
いうやつの位置付けがようわからんです。なんでも人によると「薄いのが良い」
とかいう意見を見受けますが”じゃなんなんだい!”みたいな


171 :デフォルトの名無しさん:2006/04/27(木) 00:44:03
おれはサービス層については、下のような用途かなあと思う。

・業務的には複数のモデルにまたがった業務処理を一括して行うためにある。
例:発送処理 おそらく「商品」と「発送業者」と「在庫」くらいの複数のモデルが
関わる予感がする。

・プログラム的視点では、トランザクション境界を定めるためにある。
サービス層の一つのメソッド呼び出しが1トランザクションになるようにする、
という感じで。いろんなモデルをごにょごにょした結果、裏でいろんなSQLが
走るわけだけど、それを一つのトランザクションにまとめる、という感じだろうか。

172 :デフォルトの名無しさん:2006/04/27(木) 00:58:31
> ・業務的には複数のモデルにまたがった業務処理を一括して行うためにある。
> 例:発送処理 おそらく「商品」と「発送業者」と「在庫」くらいの複数のモデルが
> 関わる予感がする。

EntityやDAOの呼び出しロジックをサービスにまとめるってことで総括して良いん
でしょうか。もっとシンプルに言うなら、ビジネスロジックの担当がサービスなん
だっていうことなんでしょうか。

173 :デフォルトの名無しさん:2006/04/27(木) 01:12:01
データベースアプリを組むときには、ほとんどドメインモデルは必要ない。

174 :デフォルトの名無しさん:2006/04/27(木) 03:01:05
データベースアプリというのが何を指しているのかよくわからないが、
データベースを使ったアプリという意味なら、データベースを使ったアプリで
ドメインモデルを使わなけりゃいつ使うのかと。

175 :デフォルトの名無しさん:2006/04/27(木) 03:23:22
>>172
1行目はそうだと思う。
2行目は微妙。たとえば売り上げオブジェクトの「未回収」メソッドを呼んだら
赤伝オブジェクトが生成されて、台帳オブジェクトに追加されるとしたら、
これは立派なビジネスロジックなわけだが、この処理を書くところはあくまで
「売上」オブジェクトであるべきだよな。
だって「未回収」メソッド呼んだら裏でごにょごにょやる内容が赤伝生成だったり
台帳更新だったりするわけで。

仮に台帳更新をしたらどっかの担当者にメールを送らないといけないとしても、
台帳の更新メソッドが呼ばれたら、メーラーオブジェクトの送信メソッド呼ぶように
してりゃいいわけで、結局外からみれば、売上の「未回収」を呼ぶだけで台帳に
赤伝が入って担当者にメールが飛ぶ、というビジネスロジックが実行される。

だったらロジック実行には売上オブジェクトだけあればOKだよな?
こんな感じで結構な数のビジネスロックはドメインモデル内で実行可能だと思う。

でも処理実行後に、たとえば現在の赤伝数とか、赤伝発行後の売上高だとか
を取得して画面に返さないといけないとしたら、これはあくまでウェブアプリ
ケーションの都合で実行するんであって、ビジネスロジックとは関係ない。
でも同じトランザクション内で赤伝数のカウントしたり、売上高計算したり
しないといけなかったりもする。
となると、サービスとして一つのトランザクション境界としてまとめるのが
一番やりやすいかなあ、と思うな。

まあでもぶっちゃけて言うと、Springとか使うとメソッド呼び出しと応答までを
トランザクション境界にする機能があって便利なんで、それを利用するためだ
けにサービス用意して、サービスを呼び出したら即モデルのメソッド一つ呼んで
終わり、なんてこともある。だってプログラム的にトランザクション制御する必要な
くて楽だからさあ。

176 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/04/28(金) 14:22:22
>>168
すんません。
参考サイトとか教えていただけないでしょうか?

179 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/04/29(土) 10:31:44
>>179
つ「言いだしっぺ必敗の法則」

ということで翻訳よろしくww

181 :デフォルトの名無しさん:2006/04/30(日) 03:38:19
>>180
つ「言いだしっぺ必敗の法則」

それやると誰も何も言いださんくなるよ。
おれの前の会社がそーだったよ。

182 :デフォルトの名無しさん:2006/04/30(日) 06:43:25
もともとNetNews(それもfj)とかの世界で人を黙らせるための
ものだからな>言いだしっぺ

あれはある意味2chの対極にある世界だった。

183 :デフォルトの名無しさん:2006/05/01(月) 00:51:28
>>181-182
つか、冗談だからw ちゃんと"ww"つけてるじゃん。

というか、前の翻訳は誰がやったんだ?

184 :デフォルトの名無しさん:2006/05/01(月) 01:12:56
最近 2ch のせいで「www」とかいうアドレスをみると
笑えてくる。

185 :デフォルトの名無しさん:2006/05/01(月) 15:15:45
>>184
人生楽しそうですね。

186 :デフォルトの名無しさん:2006/05/02(火) 19:19:08
OpenJPA記念カキコ
http://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
http://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 :デフォルトの名無しさん:2006/05/13(土) 10:40:38
ibatisって、jspみたいに自作のタグを使用できないのでしょうか?

190 :デフォルトの名無しさん: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【大歓迎】
http://pc8.2ch.net/test/read.cgi/tech/1147315998/l50

193 :デフォルトの名無しさん:2006/05/15(月) 17:44:33
>>190
すいません。ちがいます。
sqlのxmlファイルに、ibatis用の拡張タグを使用できる仕組みになっているかを確認したかったです。

194 :デフォルトの名無しさん:2006/05/16(火) 09:57:01
>>193

<!DOCTYPE sqlMap
PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">

195 :194:2006/05/16(火) 10:07:24
連投スマソ

SqlMapClientBuilder#buildSqlMapClientに
velocityを喰わせることは出来るかもね。

やったことないケド

196 :デフォルトの名無しさん:2006/05/17(水) 00:40:11
いつも参考にさせていただいてます。

現在Javaで作成している基幹系アプリケーションで、ランタイム上で
テーブルの作成・修正・削除を行う必要があります。
この場合、O/R Mapping Frameworkは向かないでしょうか?

今のところ、JavassistなどでAnnotation付きのクラスファイルを生成して、
それをHibernateのConfigurationに動的に読み込ませれば良いのでは?
と考えていますが、まだ実現に至らずです。

どなたかノウハウをお持ちでしたら、ぜひ教えてくださいm(_ _)m

197 :デフォルトの名無しさん:2006/05/17(水) 00:45:43
>>196
http://www.fk.urban.ne.jp/home/kishida/kouza/hibonrails.html

198 :デフォルトの名無しさん:2006/05/17(水) 09:45:07
>>196
> ランタイム上でテーブルの作成・修正・削除

ていうか何そのキチガイ設計。
キチガイが作ったのを引き継がされたの?

199 :196: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 :デフォルトの名無しさん:2006/05/17(水) 23:19:26
ユーザがクラスを動的に生成・変更できるってことは
バイトコード操作使いまくりか…
正直Javaでやるのが間違ってると思われ。いまからLispハッカー
探せ。奴らは毎日そういうことやってる。

202 :デフォルトの名無しさん:2006/05/17(水) 23:20:31
((((((((((((;゚Д゚))))))))))))リスリスプルプル

203 :デフォルトの名無しさん:2006/05/17(水) 23:29:43
>>199
データベースさえcreate文で作ってしまえばいいんじゃねぇの?
そしたらあとはマッピングクラス生成してマッピングっていうのをやってくれて望みどおり

204 :デフォルトの名無しさん:2006/05/17(水) 23:43:52
クラスをシリアライズしてvarchar2(4000)
くらいの列につっこむようにするとかは?

205 :196:2006/05/18(木) 00:27:31
お騒がせしてます。196です。

>>201さん
すいません、>>200の説明で、大変な御幣がありました。

>今回の案件では、ユーザが自由に編集できるクラスと
>そのオブジェクトを永続化してRDBに登録するアプリケーションを
>作成します。

ここで言うクラスとオブジェクトはJavaのものではなく、OWLのものでした。
先方さんは、
OWLのクラス・インスタンス ⇔ Javaのクラス・インスタンス ⇔ DB
という処理を希望されています。
OWLだと、トリプルの構造をそのままテーブルに格納すれば良いと
思っていましたが、メインは検索処理でインスタンス数が多いそうで、
そのようなテーブルスキーマだと速度が出ないと判断しました。

206 :196:2006/05/18(木) 00:37:18
連投すいません。196です。

>>203さん
DDLだけConnectionを直接取得してSQLで行うことも検討しています。
このとき、対応するマッピングクラスをConfigurationに設定した場合、
既にbuildされたSessionFactoryに変更を反映する方法が分かりませんorz
独自にFactoryの実装を行えば動作しそうな気もしますが・・・

>>204さん
BLOBにシリアライズしたクラスコードとオブジェクトを挿入することも考えました。
この場合、index用のデータをテーブルの別のフィールドに格納しておけば
検索速度も上がるのかなと思いますが、保守やシステムのアップグレードが
大変そうで躊躇しています。

相変わらず長文ですいませんorz
最近謝ってばかりだ…

207 :デフォルトの名無しさん:2006/05/18(木) 00:49:24
OWL? Lispハッカー以上に気の狂った世界に踏み込んでるな。
漏れにはわからん世界だが、RDBMSの性能のことならわかる。

いまのPCの性能で、行数が多すぎて性能が出ないなんて
話は猛烈なレアケース。
いろいろごちゃごちゃ理由がつくんだろうが、RDBMSはごちゃごちゃ機能を
つけてて、必ず対策があるようにできてる。RDBMSのマニュアル調べてみろ。

208 :196:2006/05/18(木) 01:15:01
>>207さん

OWLのクラス階層の編集を可能とするため、上位クラスの変更を下位クラスにも
反映させる必要があります。
また、個々のクラスのインスタンス数は大したことはないですが、想定している
インスタンス数が全体で100万のオーダーであるため、それを一つのテーブルで
OWLのトリプル単位でばらして格納するよりは、クラス単位でテーブルを生成して
そこに持たせた方が良いのでは、と考えました。
(複雑なデータ型の問題ももちろんあります)

O/R Mapping Toolを使わずに、自前で作成した方が良いのかもしれません。
とりあえず、仕様を含めて、RDBMSをもう一度勉強しなおしてきます。
ご指摘ありがとうございました。

あぁ、今夜もクラス階層を構築している夢を見そう orz

209 :デフォルトの名無しさん:2006/05/18(木) 01:21:21
ところでOWLってなに?
腹がよじれた失意体前屈?

210 :デフォルトの名無しさん:2006/05/18(木) 01:56:02
Javaのインスタンスを生成する必要がわからん……

211 :デフォルトの名無しさん:2006/05/18(木) 10:39:25
>>205
>OWLのものでした。

BC++のObjectWindows Libraryかと思った

212 :デフォルトの名無しさん:2006/05/18(木) 13:05:54
>>194
本当にすいません。
タグはタグでも、<select>内に書ける<equal>などのタグです。

213 :デフォルトの名無しさん:2006/05/18(木) 13:21:17
>>209
巨乳巨腹のorzです。

214 :デフォルトの名無しさん:2006/05/18(木) 14:03:33
スキーマの緩いXML-DBを使った方がよかったりして。

275 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)