[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 10/04 08:14 / Filesize : 245 KB / Number-of Response : 874
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



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以降


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 グッジョブ!!







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<245KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef