5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 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以降


2 :デフォルトの名無しさん:2005/12/16(金) 11:56:08
2げと?

3 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2005/12/16(金) 12:12:38
とりあえず立てた。あとはヨロ
ノシ

5 :デフォルトの名無しさん:2005/12/16(金) 13:09:16
ここも貼ろうよ

[GlassFish / EJB3.0 ReferenceImplemention ]
https://glassfish.dev.java.net/

6 :デフォルトの名無しさん:2005/12/16(金) 20:53:47
これも。

[S2Dao]
 ttp://www.seasar.org/s2dao.html

7 :デフォルトの名無しさん:2005/12/16(金) 21:29:39
Mapping-Framework使いの皆さんに聞きたいんですが、
今回、Java⇔Oracleで、基幹システム(見積、受注、発注、出荷、在庫など)を
組むことになったのですが、
こういうのって意外と顧客独自な複雑な仕様があるので、テーブルもすごい何十個とかあります。
全てのテーブルのMappinngクラスを作ったりするもんなんですか?
複数テーブルとリレーション組んだりする時もその都度Mappinngクラス作るんですか?

なんか、結局SQL文コードに埋め込む形になっちゃいそうなんですが・・・
実際どうなんでしょうか?

8 :デフォルトの名無しさん:2005/12/17(土) 01:01:54
>>7
通常は、クラスを自動生成したりするツールがあるので、テーブルの数はあまり問題じゃない。
問題は、顧客独自な複雑な仕様のほうだろ。それがO/Rマッパーでサポートできるかどうか。

というか、O/Rマッパー使うときは、O/Rマッパーを使うという前提でテーブル設計しないとつらいことが多い。
一般には、楽できるO/Rマッパーほどテーブル設計の自由度が低く、逆に自由度が高いO/Rマッパーだとあんまり楽にならない。

>複数テーブルとリレーション組んだりする時もその都度Mappinngクラス作るんですか?

O/Rマッパーによる。

9 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2005/12/23(金) 22:33:39
値がnullのときにinsertに加えないようにする設定があったような気がする

13 :デフォルトの名無しさん:2005/12/24(土) 10:20:18
blanco Framework
http://hp.vector.co.jp/authors/VA027994/blanco/blanco.html

これもここでいいのかな?
使った人レビューなぞきぼんぬ。

14 :デフォルトの名無しさん: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 :デフォルトの名無しさん: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 イン アクション
http://www.amazon.co.jp/exec/obidos/ASIN/4797330805/

ついに出るねぇ。
英語読めない俺としては嬉しい限り。

20 :デフォルトの名無しさん:2005/12/28(水) 03:50:24
>>19
原著が出たのは結構前なので、やっぱりHIBERNATE 2.xベースの解説なのかな。
3.xへの補足も入っているとうれしいんだけど。

21 :デフォルトの名無しさん:2005/12/28(水) 18:27:04
ibatisがキャッシュしてしまう問題で、
sqlmapのflushDataCache()メソッドを使用したのですが
キャッシュが消えずに、2回目のsqlでエラーになってしまいました。
キャッシュを削除する方法はないでしょうか?

22 :デフォルトの名無しさん:2005/12/28(水) 20:26:14
>>21
selectの抽出項目を条件により動的に変更する、を言っているの?
どうやらibatisではだめなようだね。
rezultクラスをHashMapにしても、最初のクエリーの項目が残り、
次回のクエリーで、初回の項目と違うとエラーになります。
Builderで再ビルドすれば、全てクリアできるので問題なし。
1クエリごとに生成するので大変だが・・・

23 :デフォルトの名無しさん:2005/12/28(水) 20:43:13
one-to-one がまともになる予定ある?

24 :デフォルトの名無しさん:2006/01/01(日) 09:17:49
>>21
remapResultsのことかな?

25 :デフォルトの名無しさん:2006/01/05(木) 10:55:27
>>24
remapResultとはどのようなことでしょうか。
名前から推測すると、多分その設定によるものだと思います。
ちょっと調べてみます。

26 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/01/05(木) 14:52:44
>>26
どこでパースエラーになってるんでしょう?
ちなみに、dtdはttp://www.ibatis.com/dtd/sql-map-2.dtdとおなじものですよね?


28 :デフォルトの名無しさん:2006/01/05(木) 14:57:54
>>26
ああ、バージョンは2.0.9以降じゃないとダメみたいで。

29 :デフォルトの名無しさん:2006/01/05(木) 20:01:06
マッピングを作成するときに、一番手軽(作成するものが少ない)で、
一番メンテナンスしやすい(修正のほとんどが設定ファイルなど)のは
ダントツでibatisで間違いなし???

30 :デフォルトの名無しさん:2006/01/05(木) 22:47:01
Cayenneもやればできる子>>29
ただし既存のテーブルには弱いが。

31 :デフォルトの名無しさん:2006/01/05(木) 23:33:04
Hibernateでも、自分で作成するものは少ないし。

32 :デフォルトの名無しさん:2006/01/06(金) 09:27:33
>>29
カナ〜リ大きなXMLを管理する覚悟は必要。特にテーブルの数が多い時。

33 :デフォルトの名無しさん:2006/01/06(金) 09:52:14
29です。ibatis派です。
sqlはすばらしい言語なので、プログラムではsqlのすばらしさを邪魔しないフレームワークが
一番賢いと考えています。
つまり、sqlで対応できるところは、ロジックではなくsqlを修正する。
そのsqlの修正は、設定ファイル内のsqlそのものだけ、が一番よいと思います。
そのほうがsqlとjavaの特徴を最大限に引き出せるし、メンテが楽です。
俺は簡単かどうかに関係なく、クラスの数が多いのは好きではないです。
マッピング処理の為にクラスを作成するのは納得できないです。それが自動生成できるものだとしても。
いろいろなマッピングツールを見ましたが、特にEJBはひどいと思いました。簡単なことを複雑に考えようとしているし。
クエリの結果データをbeanにマッピングするたびにクラスを生成するツールは好ましいと思いません。
どうでしょうか、この意見

34 :デフォルトの名無しさん:2006/01/06(金) 09:59:10
> sqlはすばらしい言語なので、
この仮定に同意できない。

35 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/01/06(金) 10:38:09
>>35
HibernateやEJB3って、ibatisみたいにsqlをかけるのでしょうか。
独自のSQLだと思っていたのですが。古い情報ですか。

38 :デフォルトの名無しさん:2006/01/06(金) 10:49:03
>>36
まさにその通りです。
sqlとjavaクラスの間に物理的な依存性を持たせるのは危険だと思いっています。
その依存性を切り離すのがまさにibatisなのかなぁと。
sqlそのものの結果をクラスに好きなようにマッピングできるのですから、すごい。
というか、ibatisが普通の考え方だと思うんですよね。
なんか、javaはより難しく考える傾向にあるような・・・・。

39 :デフォルトの名無しさん:2006/01/06(金) 11:00:13
>>38
ただibatisのSQL設定ファイルはいわばテンプレートなんだがその能力が低い。
リストや配列のプロパティで、そのままtoString()を呼んでDBに登録したいがエラーになる。
前のレスにあったけど、velocityみたいなテンプレート機能があるといいけど。
それに、qつのクエリのマッピングが一つのオブジェクトしか対象にできないのが痛い。

40 :デフォルトの名無しさん:2006/01/06(金) 22:04:16
>>37
かけるよ。

41 :デフォルトの名無しさん:2006/01/09(月) 19:25:17
S2Daoで、各テーブルに対応するJavaファイルを作るのって手でやるんでしょうか?
リバースエンジニアリングしてくれて、勝手に作ってくれたりします?


42 :デフォルトの名無しさん:2006/01/09(月) 20:11:58
>>41
S2DaoMaker

43 :デフォルトの名無しさん:2006/01/09(月) 20:25:16
S2、S2って最近うぜー

44 :デフォルトの名無しさん:2006/01/09(月) 21:52:18
いちいちageるなうぜー

45 :デフォルトの名無しさん:2006/01/10(火) 10:10:07
iBATIS_ToolsのAbatorを試した人、感想キボンヌ
eclipseのpluginらしいのだけど。。。

46 :デフォルトの名無しさん:2006/01/10(火) 11:04:00
>>45
velocityみたいに、sqlmapの中で使えるtoolがほしい・・・

47 :デフォルトの名無しさん: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 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/01/10(火) 18:36:39
>>47
HashMapに設定可能というのは、
 resultMapのclassにHashMapを使える
というのであって、
 HashMap型のプロパティに値を設定できる
訳ではないのではないかという気がします。

50 :デフォルトの名無しさん:2006/01/10(火) 18:39:54
>>48
自分で試したわけではないけど、こういうページがありました。
ttp://www.mail-archive.com/ibatis-dev@incubator.apache.org/msg00854.html
<iterate>の内側のプロパティ名はそのまま渡しているみたいです。

51 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/01/25(水) 21:50:39
ibatisでiteratorの入れ子は可能でしょうか。
入れ子のiteratorのpropertyのインデックスを指定しないと動作しないです。

54 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/01/27(金) 10:22:32
Hibernateで他がロックしているかどうか取得する方法ってありますか?
他がLOCK TABLEしている時にHibernate側でupdateしようとすると、他が
コミットされるまで、止まってしまいます。

56 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/01/28(土) 02:35:28
>>57
合ってる。クラスもそのように自動作成された。
Hibernate in Actionに載ってたけど、many-to-oneタグのupdateとinsertをfalseにすることが重要みたい

59 :デフォルトの名無しさん:2006/01/29(日) 00:02:02
>>58
ありがとうございます!
やってみます。

ちなみに、参考までに伺いたいのですが、Hibernate Toolsの自動生成のマッピングの品質(?)ってどうなんですか?

本とかネットでも手動でマッピング定義の解説が多いような気がするので、
もしかしたら、手動でマッピングしないとパフォーマンスに問題があるとか、
複雑なテーブルはマップできないとか、そういう事情でもあるのかな?って思って。

60 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/01/31(火) 00:42:23
>>60
なるほど!
チェック作業は入るとしても、全部手書きよりは断然効率良さそうですね。
是非使ってみたいと思います。
いろいろとありがとうございました!

62 :デフォルトの名無しさん:2006/01/31(火) 11:34:03
Hibernate Toolsは前使おうとしたが、
ファイルエンコードが指定出来ず苦労した記憶が・・・
(UTF-8のプロジェクトで使うのにMS932でしか生成できず)
さすがにもう改善されたのかな?

63 :デフォルトの名無しさん:2006/01/31(火) 17:51:14
Hibernate Toolsを使ってDBから定義ファイルを生成するときに
many-to-manyカラムを生成する方法をご存じの方がいたら、教えてください。

64 :デフォルトの名無しさん:2006/02/02(木) 23:54:22
koichikさんの日記にあるようなhibernateが実行しているsqlを整形して
表示するのってどうやるんですか?
show_sqlだとインデントまではしてくれないですよね。。。

65 :デフォルトの名無しさん:2006/02/03(金) 03:34:10
>>64
つ hibernate.format_sql

66 :デフォルトの名無しさん:2006/02/03(金) 21:50:00
>>65
Thanks a lot!

67 :デフォルトの名無しさん:2006/02/08(水) 02:14:46
nHibernateはどうよ?

68 :デフォルトの名無しさん:2006/02/08(水) 12:50:30
Collectionの扱いがちょっと面倒

69 :デフォルトの名無しさん:2006/02/08(水) 14:27:01
>>67
素直にADO.NET使った方がよさげ

70 :デフォルトの名無しさん:2006/02/09(木) 00:57:25
自前でやれってか?

71 :デフォルトの名無しさん:2006/02/09(木) 08:04:25
>>69
他でも時々そういう意見目にするんだけど、
NHibernateよりADO.NET使う方がいい理由ってなんなの?

なんかはっきりとADO.NETの方がいい!!って理由あんのかなぁ?

72 :デフォルトの名無しさん:2006/02/09(木) 09:03:23
ORMならADO使ったほうがよさげ
つかスレ違い

73 :デフォルトの名無しさん:2006/02/09(木) 09:05:57
>>71
ツールのサポート
情報の量
人の量

74 :デフォルトの名無しさん:2006/02/10(金) 11:31:03
ibatisのデータマッピングでの強い味方
ttp://canetrash.seesaa.net/article/2778499.html


75 :デフォルトの名無しさん:2006/02/11(土) 21:36:14
HibernateやEJB3.0,iBatis程度をありがたがるjava技術者は哀れだな。


76 :デフォルトの名無しさん:2006/02/11(土) 22:03:12
ふむ、じゃあ何をありがたがろうか?

77 :デフォルトの名無しさん:2006/02/12(日) 10:24:46
HibernateやEJB3.0,iBatisよりもADO.NETの方が優れている理由は、ORMとしての
実力は大きく変わらないが、Viewまで含めて.NETの機能が練られているところだろう。

いくらDAOのコーディング量が減っても、部分最適にしかならないから工数が減らない。


78 :デフォルトの名無しさん:2006/02/12(日) 15:35:39
じゃあViewにWicketってことで終了。

79 :デフォルトの名無しさん:2006/02/12(日) 16:26:54
Clickは?

80 :デフォルトの名無しさん:2006/02/12(日) 16:29:22
所詮は寄せ集めだな。

81 :デフォルトの名無しさん:2006/02/12(日) 21:59:44
フロントから裏までWebObjectsで終了じゃん。

82 :デフォルトの名無しさん:2006/02/13(月) 13:52:52
>>80
それをいうと「寄せ集めと大差ないクオリティのXXX(値は各自の信仰に依存)って何よ?」って話になるからやめれw


83 :デフォルトの名無しさん:2006/02/13(月) 17:48:53
漏れ寄せ集めの方が好きだぬ。

なんかeclipse VS netBeans(あるいはvisualStudio)の
議論を見てるみたい。目的目標出さずに道具の議論って
あんま意味ないよ。

84 :デフォルトの名無しさん:2006/02/14(火) 02:34:07
1000行のデータを1ページ50行ずつでページングしたりする時に、
各ページに必要なデータだけをDBからロードするようにしたいんだけど
この場合はどうやればいいんだ?
当方Hibernate3を使用してます。

85 :デフォルトの名無しさん:2006/02/14(火) 08:09:30
>>84

ttp://www.hibernate.org/hib_docs/v3/reference/en/html/objectstate.html#objectstate-querying-executing-pagination

86 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/02/15(水) 21:46:00
not-null="ignore"

88 :デフォルトの名無しさん:2006/02/16(木) 08:24:05
OracleがJBoss買収したら、TopLinkとHibernateは一つになるのか?
あと、JBoss CacheをOracleがどう使うのか気になるな

89 :デフォルトの名無しさん:2006/02/16(木) 17:30:07
EJB3でTopLinkとHibernateはひとつになってる希ガス

90 :デフォルトの名無しさん:2006/02/16(木) 19:03:37
APIが一つにまとまったからね。

TopLinkの「放出されていない部分」っていうと、現状JDeveloperに
載ってるGUIツールの部分や分散環境対応部分が大きいのだっけ?

oc4jとJBossコンテナはどう棲み分けるのかなぁ、Oracleって
GlassFishも支援してるから、まるでOracle一つの内で三つ巴に
なってるみたいなイメージだね。

買収成功祈る>Oracle

91 :デフォルトの名無しさん:2006/02/17(金) 01:52:07
BEA、KodoをOpen JPAとしてオープンソース寄贈
http://pcweb.mycom.co.jp/news/2006/02/15/344.html

92 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/02/17(金) 03:45:20
なんで唯一試すのがMETA-INFなんだろう・・・

94 :デフォルトの名無しさん:2006/02/17(金) 04:08:23
>>93
スミマセン。
> WEB-INF/classesに置いてみても同じです。
と書いたように、他にはWEB-INF/classesも試しています。

95 :デフォルトの名無しさん:2006/02/17(金) 07:28:25
>>92
WEB-INF/classes/META-INF/persistence.xml

classpath内の「META-INF/persistence.xml」を検索しているみたい
WARのMETA-INFに入れても認識しないので注意

96 :デフォルトの名無しさん:2006/02/17(金) 08:04:49
>>95
うぉぉぉぉぉ!!!!!
激しくサンクスっ!

うごきましたー!

97 :デフォルトの名無しさん:2006/02/26(日) 16:58:56
SpringのgetHibernateTemplate().findで検索をかけたら、NoClassDefErrorが
発生しました。
loadAllだと問題なく抽出されるし、クラス名もちゃんとフルパスで指定
してるんですが、何が間違ってるんでしょうか。

98 :デフォルトの名無しさん:2006/02/28(火) 23:35:35
>>97
さすがに、HibernateとSpringのバージョンくらいは書いた方が良いのでは・・・?

99 :デフォルトの名無しさん:2006/03/01(水) 01:32:48
これは失礼いたしました。
spring1.2.6とhibernate3です。

100 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/03/02(木) 01:04:51
>>100
排他制御はしないの?

103 :デフォルトの名無しさん: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:2006/03/02(木) 17:15:09
ごめんなさい。記述が間違っていました。
× f1を更新した際は、システムA,B共にf3を更新します。
○ f1を更新した際は、システムA,B共にvを更新します。
同じカラムを更新する場合はバージョンを両システムとも上げます。

>>104
4) のところでupdate文にwhere v=1 が含まれると思いますので、
エラーにならないでしょうか?

>>105
両システムの更新するカラムがぶつかっている場合、ぶつかっている
箇所のみ排他処理をするのではまずいですか?

108 :デフォルトの名無しさん:2006/03/03(金) 00:17:58
>>107
dynamic-updateを使うってこと?
自分のとこでは使ってないから、dynamic-updateが確実なのかどうかよくわからないけど

その場合でも、Aシステム用のクラスにはVersionカラムを定義せず、
ナンバーアップも排他制御も全て手作りで書くのが無難だと思う

業務的に必要なら仕方ないけど
更新前に余計にSQL発行するわけでもないし
そこまでして排他制御を避ける理由がよくわからないな

109 :108:2006/03/03(金) 00:19:54
× 排他制御を避ける理由
○ バージョニングを避ける理由

110 :100: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: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 :デフォルトの名無しさん: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を使った方がよかったりして。

215 :196: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 :デフォルトの名無しさん:2006/05/18(木) 22:22:06
>>215
OWLってのの具体的な事は全くわからんが、
最初の3行が間違ってる気がするな。

217 :デフォルトの名無しさん:2006/05/18(木) 23:33:54
性能要求が厳しいのにRDBMS依存を避けろ、か…
キチガイの相手は大変だな。
おそらく全部ぐだぐだになって成果物ゼロで終わると思うが、
金はしっかり取れよ。

218 :196: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 :デフォルトの名無しさん:2006/05/19(金) 00:36:42
>>218
>OWLってのの具体的な事は全くわからんが

おまえ日本語読める?

220 :デフォルトの名無しさん:2006/05/19(金) 00:53:12
>>219
顧客がイカレてるせいで、こいつもおかしくなってるんだろう。
金だけはしっかり取れよ。

221 :デフォルトの名無しさん:2006/05/19(金) 01:15:22
>>159
ヒルベルト変換、ヒルベルト包絡線を思い出した

222 :デフォルトの名無しさん:2006/05/19(金) 01:44:03
何が悪いとはっきり言うつもりはないが、もうちょっとまともに検討しないと大火災になるぞ、そのプロジェクト。


223 :デフォルトの名無しさん:2006/05/19(金) 01:51:03
もうなってるようにしか見えないっす

224 :デフォルトの名無しさん:2006/05/19(金) 02:19:36
LDAPとかのがまだマシなような。

225 :デフォルトの名無しさん:2006/05/19(金) 10:31:23
何から何まで不毛な要件で、かつゴールもなんら魅力が無いと来た。
世の中色んな案件あるんだね。

226 :デフォルトの名無しさん:2006/05/19(金) 14:11:21
dbutils結構いいかも。

227 :デフォルトの名無しさん:2006/05/19(金) 14:56:26
Mapに詰め込むだけでもMappingといやーMappingだが

228 :デフォルトの名無しさん:2006/05/19(金) 22:42:45
Beanに詰めることも出来るよ。一応。

229 :デフォルトの名無しさん:2006/05/19(金) 23:15:35
ちんこがBeanBeanでつ

230 :デフォルトの名無しさん:2006/05/19(金) 23:51:15
   〃∩ ∧_∧
   ⊂⌒(  ・ω・)  はいはいわろすわろす
     `ヽ_っ⌒/⌒c     
        ⌒ ⌒


231 :デフォルトの名無しさん:2006/05/27(土) 13:38:21
Cayenneで部分読みしたいんですがどうすればわかりません。
サンプルが落ちているところをご存知の方いませんか?

232 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/05/31(水) 19:46:51
ストアド化しろ

236 :デフォルトの名無しさん:2006/05/31(水) 22:47:03
つうか素でHibernateのほうが速いだろ。

237 :デフォルトの名無しさん:2006/06/01(木) 01:50:11
それはほとんどない。

238 :デフォルトの名無しさん:2006/06/01(木) 22:10:42
どういう設定をしたら参照がJDBCより遅くなるのかと。あらゆる局面で
lazyオフでキャッシュなしか?

239 :デフォルトの名無しさん:2006/06/01(木) 22:27:56
>>238
いくつかは考えられるだろ。
・最初の一回目の検索の場合(Hibernateが該当するオブジェクトをまだロードしていない状態)
・ストアドプロシージャを呼び出す場合(Javaアプリ側でなんとかするより、ストアド使った方が速い場合が多い)

240 :234:2006/06/03(土) 00:48:56
みなさんレスありがとうございます。

ちなみに、バッチ処理で1回のみですがテーブル全件舐めたりします。
1回きりの場合だとHibernate導入するメリット無さそうですね・・・(パフォーマンス面で)。

ストアドである程度書いてJDBCで呼ぶってのが理想的みたいですが、ストアドで作るとメンテできん!って怒られます。
バッチでストアド無しでパフォーマンス高くする手ってなんかないですかね〜・・・。

241 :デフォルトの名無しさん:2006/06/03(土) 11:17:37
バッチ処理でHibernateを利用する理由はほとんど無いな。


242 :デフォルトの名無しさん:2006/06/03(土) 15:39:34
O/R-Mappingでやってることって、結局

・バックグラウンドでSQLを作って投げる
・返ってきたresultsetをbeanに自動的にマッピングしてcollectionに詰めて返す

が本質だよね?
そう考えると、DbUtilとかでも十分なのかな。。。
うちの会社、こういう新しい?技術とかの導入に消極的だし、
新しい知識を積極的に勉強しようっていう技術者も少ない。。。

個人的にはiBATISあたりがよさげなんですが、使ってる人いますか?

243 :デフォルトの名無しさん:2006/06/03(土) 16:15:01
キャッシュとか遅延ロードが主なメリットじゃない?

244 :デフォルトの名無しさん:2006/06/03(土) 16:38:13
関連テーブルの紐付けが嬉しい。

245 :デフォルトの名無しさん:2006/06/03(土) 16:46:05
今一これの利点が分からないんだけど
いちいちXMLとかに定義しないと使えないわけ?
extends MySQLObjectとかしてささっとプロパティだけで完結して欲しい。

246 :デフォルトの名無しさん:2006/06/03(土) 17:12:28
>>242
関連テーブルを自動的に取ってきてくれるという重要な機能が
あるでしょ(これはDbUtilにはない)。

247 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/06/03(土) 17:25:55
最近はどこのO/Rマッパーもテーブルからのクラス自動生成機能持ってる
JPA使えばXMLファイルはもういらない

249 :デフォルトの名無しさん:2006/06/03(土) 17:33:59
>>247
ふーん。いいね、組み込みDBとかで気軽に永続化できるようになると
ゲームとかも作りやすくなっていいかなぁ

250 :デフォルトの名無しさん:2006/06/03(土) 19:05:00
>>245
MiddlegenでもXDocletでも、Hibernate Annotationでも、好きなの使え。

251 :デフォルトの名無しさん:2006/06/08(木) 22:05:18
JPAの解説記事少ないなあ。
みんなxmlでしこしこやってるの?

252 :デフォルトの名無しさん:2006/06/08(木) 23:30:24
>>240
いまPro EJB3を読んでるところだと思われ。
でもなんでそこでxmlが出てくるのかわからない。

253 :デフォルトの名無しさん:2006/06/09(金) 10:14:29
>>251
Java Persistence APIってなんなの?

254 :デフォルトの名無しさん:2006/06/09(金) 10:26:06
ORまっぱの仕様

255 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/06/10(土) 18:42:38
>>255
JSPタグライブラリにJDBCタグライブラリがあるが、JDBCはJSPでDBアクセス用か?

258 :デフォルトの名無しさん:2006/06/10(土) 20:18:24
そう。

259 :デフォルトの名無しさん:2006/06/11(日) 13:51:28
アホな流れになってるな。
子供か!!

260 :デフォルトの名無しさん:2006/06/11(日) 16:52:36
そう。

261 :デフォルトの名無しさん:2006/06/13(火) 22:09:47
Hibernate2xで関連テーブル使ってmany-to-manyでマッピングしてる時、bagとかのwhere属性で関連先のテーブルのカラムに対する条件って書けますか?
普通にカラム名と条件書くと関連テーブルにそんなカラムねーよ!!って怒られちゃうんですが・・・。

262 :デフォルトの名無しさん:2006/06/14(水) 07:18:09
能動的にコーディングできるってだけで、O/Rマッパーはチューニングに向いてないんだな

263 :デフォルトの名無しさん:2006/06/14(水) 09:18:08
少なくとも、困ったときに直にSQL書いて実行できるようなフレームワークじゃないと、
使えないなあというか使うの怖いなあ。
まあそのときだけJDBC使えって話はあるけど。


264 :デフォルトの名無しさん:2006/06/14(水) 10:19:43
Hibernateは問題ないな。

265 :デフォルトの名無しさん:2006/06/14(水) 10:26:34
>>263
ibatis

266 :デフォルトの名無しさん:2006/06/14(水) 11:37:06
でも直に書けるフレームワークは、普段から直に書く様に成って、後で困る罠。

267 :デフォルトの名無しさん:2006/06/14(水) 17:14:33
>>266
そういう開発者、いそうだね。特に新規に導入するとき、わからない→直書きってされそう

268 :デフォルトの名無しさん:2006/06/14(水) 23:34:39
でもハマった時の最後の手段として、SQLとかJDBC APIとかとも上手く連携してくれるのがいいなぁ。
プログラマとしては逃げたくなくても、サラリーマンとしてそういう手段に逃げちゃう時が多々あるんで・・・・・・。

269 :デフォルトの名無しさん:2006/06/17(土) 11:50:26
Hibernate3とEJB3、これから作るシステムに入れるならどっちがおすすめ?

270 :デフォルトの名無しさん:2006/06/17(土) 11:51:43
今までどおりの使い分け

271 :デフォルトの名無しさん:2006/06/17(土) 11:57:00
ゲームで使えそうなORMはHibernateくらいかい?組み込みたいのでオススメを聞きたい

272 :デフォルトの名無しさん:2006/06/17(土) 14:51:30
>>269
EJB3を使ってJPAの実装としてHibernateを利用

273 :デフォルトの名無しさん:2006/06/17(土) 14:52:33
>>271
つうか、これからはJPAという標準になるんだから、ゲームで使うくらいならTopLinkもHibernateも大差なかろう。

274 :269:2006/06/18(日) 01:32:50
>>270
今までEJBって使った事ないんですが、使い分けってどんな基準ですか?

>>272
なるほどー。
使い分けってよりJPAの実装としてHibernateを選択って感じなんですね。

275 :デフォルトの名無しさん:2006/06/18(日) 02:45:06
>>274
いままで使ってなかったのはEJB2
EJB3とは別物。
ORマッピング使うなら、EJB3で十分。
実質的にはHibernateの仕様がEJB3になったわけだから、EJB3とHibernateをどう使い分けるかということが、そもそもナンセンスということになる。

276 :デフォルトの名無しさん:2006/06/18(日) 02:57:00
>>275
リモートで呼び出せるかどうかのみ違う。
使い分けはそこだけかな。

277 :デフォルトの名無しさん:2006/06/18(日) 03:02:14
JPA仕様とそれぞれのORマッパーって結構違うんじゃない? Hibernateについては同感だけど。

たとえばCayenneもJPAをサポートするといって準備しているけど、Cayenneの
発想とJPA(Hibernate)のやり方(というか考え方)って結構違うように思う。特に
トランザクションを意識させない設計とか、どうすんだろ、と思う。

TopLink(Grassfishに組み込みのやつ)とかはどうなんだろうか。

278 :275:2006/06/18(日) 03:47:22
>>277
HibernateもCriteriaとかProjectionとかがEJB3に取り入れられてなくて残念なんだけど、ORマッピングのプログラムインタフェースの部分だけを見ればJPA準拠ならHibernate互換ということになるんじゃないかな、と思ってます。

279 :275:2006/06/18(日) 03:53:08
>>277
重箱の隅だけど、GlassFishね。草みたいな魚じゃなくて、ガラスみたいな魚。
TopLinkは、JPAの実装として使う限りでは、個性を感じない。
もちろん、どのJPA実装も、JPAの実装として使う限りでは個性を感じないというのは当たり前の話ではあるんだけど。

280 :デフォルトの名無しさん:2006/06/18(日) 05:50:23
パフォーマンスの差とかあるのかな?

281 :275:2006/06/18(日) 08:08:21
それぞれの固有の機能を使わない限りは、無視できるほどの違いしかないと思う。
でも実測値がほしかったら、実サーバーで確認するのんが確実

282 :デフォルトの名無しさん: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 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/07/04(火) 23:56:57
>>281
すでに「おい、そのころには既にEOFがあったわけだが。
そのEOFにすら先行技術があるんだが?」と冷静なツッコミが
入っとるよ。

286 :デフォルトの名無しさん:2006/07/05(水) 05:13:30
BerkeleyDB Java Editionつかってます

287 :285:2006/07/05(水) 09:03:31
アンカーミスった。
>>282
だった。

288 :デフォルトの名無しさん:2006/07/10(月) 22:01:42
SimpleORM
http://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:2006/07/17(月) 21:46:20
いきなり缶詰ー>架空請求スパムの送信

292 :デフォルトの名無しさん:2006/07/18(火) 01:36:11
亜米利加の特許は先発明制だから、いくらでも先行特許あるよ。

293 :デフォルトの名無しさん:2006/07/18(火) 03:38:48
>>290 = >>291
自分でマルチして、自分で突っ込んでる

294 :デフォルトの名無しさん:2006/07/18(火) 18:28:56
HibernateのHQLで select sum(*) の返り値を
IntegerじゃなくてLongで取得したいのですが、いったいどうすれば…

295 :デフォルトの名無しさん:2006/07/18(火) 20:19:24
>>293
IDも出ない板でよく言うよ

296 :デフォルトの名無しさん:2006/07/19(水) 01:07:07
>>294
ttp://opensource.atlassian.com/projects/hibernate/browse/HHH-1538
3.2での対応になる

297 :デフォルトの名無しさん:2006/07/19(水) 02:32:50
>>296
ありがとうございます

丸一日、試行錯誤してしまいましたが
3.2.CR2入れることにします…

298 :デフォルトの名無しさん:2006/07/22(土) 09:36:29
知らぬ間にこんなの追加されていた。
アノテーションにSQLを書くみたいだが。

ttp://download.java.net/jdk6/docs/api/java/sql/DataSet.html


299 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/07/23(日) 09:05:28
>>300
標準のは、CachedRowSetを使っていて、CachedRowSetはJDBCドライバの対応が
必要だから、存在価値としてないわけじゃないと思うけどね。

しかし、どうせなら誰か.NETのDataSetをそのまま実装して欲しいな。
NinjaVAが実装しているけど、DataSetのソースが5000ステップくらいあるのと
微妙に違うので、いまいち使いづらい。

302 :デフォルトの名無しさん:2006/07/26(水) 23:40:17
>>300
公開期待してます。

303 :デフォルトの名無しさん: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 です。

http://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:2006/07/28(金) 01:44:30
始めてオープンソースでソフトを公開しました。
ドキドキしています。

307 :デフォルトの名無しさん:2006/07/28(金) 01:54:41
早速パクって儲けさせていただきました。無料で公開してくれてありがとう。

308 :デフォルトの名無しさん:2006/07/28(金) 08:15:21
>>304
乙!
と思って、早速いろんなDBで動作確認…と思ったら、
リリース物件もソースコードリポジトリも空っぽですよ?

309 :300:2006/07/28(金) 08:23:51
俺のアカウントからなら見られるのに……
俺sf.jpの使い方わかってないぽいので、しばしお待ちを……
スレ汚してすいません。

310 :デフォルトの名無しさん:2006/07/28(金) 09:41:06
>>300
頑張れ。君に期待している。

311 :デフォルトの名無しさん:2006/07/29(土) 00:47:50
>>300
私も期待しています。
頑張ってください。

312 :デフォルトの名無しさん:2006/07/29(土) 01:58:50
>>308
DL出来るようになってるみたいだね

313 :デフォルトの名無しさん:2006/07/30(日) 04:53:44
sfはリリースしてから実際にDLできるまでにラグがあるらしい

314 :ストーカー:2006/08/03(木) 01:49:49
http://crudfactory.sourceforge.jp/tutorial.html
こんなんできてるYO!

315 :デフォルトの名無しさん:2006/08/03(木) 11:29:37
メモリに入りきらないぐらいの巨大なテーブルをSELECTして、一件ずつ処理したいと思っています。
Hibernateを使おうかと考えていますが、ネットの入門を見ている限りSELECTした結果を一気に取得しているようです。
全件一気にオブジェクト化するとメモリが足りなさそうなのですが、こういう用途はJDBC使って1件ずつ取り出した方が良いんでしょうか?

316 :デフォルトの名無しさん:2006/08/03(木) 11:56:03
1件ごとにSELECTすると効率が悪いから
何十件かまとめてSELECTするよろし。

それにそもそも、巨大なテーブルを全部変更するなら
ストアドプロシージャのほうが圧倒的に効率がいい。

317 :315:2006/08/03(木) 12:48:31
書き方が悪かったですね、申し訳ないです。
SELECT * FROM TABLEして全件取得して、ResultSet.next()で1件ずつ処理したいって事なんです。
Hibernateの入門ページ見てると、検索結果がListで一気に戻ってきているようだったので。
つまり聞きたいのは、検索結果全件を一気にオブジェクト化するとメモリが足りないので、
検索結果全件の中から1件ずつオブジェクト化して処理できないかな?って事です。

ListのgetやIteratorのnext時にオブジェクト化されていたら問題なさそうなんですか。
って書いてたら聞くより本なり読んでちゃんと理解してから判断した方がいい気がしてきた・・・。

318 :デフォルトの名無しさん:2006/08/03(木) 13:24:03
>>713
素のJDBCだと 一方向に読み込み専用 で取得すると
一気には取ってこないみたいだね

319 :315:2006/08/03(木) 16:36:42
>>318
それをO/RマッピングでやってみたいんですがやっぱJDBC使わないとダメなんでしょうかね。
ふむむ、できないとしたら分割してSELECTするなり工夫が必要かぁ・・・。

320 :デフォルトの名無しさん: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:2006/08/03(木) 17:14:37
>>320
おお、良い感じですね。
問題はいらなくなった読み込み後のオブジェクトがちゃんとゴミ掃除されるかどうかだけど・・・とりあえずいろいろ読んでみます。
dクス!!

322 :デフォルトの名無しさん:2006/08/07(月) 18:33:15
Beanて、テーブル毎に一つ作るものでしょうか?
INSERT目的なら全カラム必要になるだろうけど、
SELECT目的なら一部のカラムのみで十分なケースってあると思うんです。

例:
BOOKというテーブルはID、名前、著者名、カテゴリ情報、概要等、
本に関する情報を多数持っているが、
検索結果に表示するのは名前だけで十分、という場合。

この時ID、名前以外の情報まで持ってくるのは非効率な気がするのですが、
このSELECT目的に別にBeanクラスを定義するというのはアリでしょうか。

class Book { 全カラム }
class BookForSearchResult { ID, 名前 }

それとも、この程度の効率はO/Rマッピングを使用する以上、
気にしない方がいいんでしょうか。

323 :デフォルトの名無しさん:2006/08/07(月) 19:15:38
>>322
どうしても気になるのなら、IDと名前だけのビューを作って、
そのビューとBeanをマッピングしたらどうでしょう?

324 :デフォルトの名無しさん:2006/08/08(火) 01:42:02
hibernate使ってたけどいろいろ面倒くさくなってきたのでCommonsDbUtilsに戻してしまった。
なんかすがすがしい気分になった。

325 :322:2006/08/08(火) 11:09:26
>>323
なるほど、ビューを対象にするなら違和感ないですね。
カラムを限定するようなケースが発生するのは大概検索画面なので、
わざわざビューを作る、というのもアリが気がします。
ありがとうございます。

326 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/08/09(水) 00:20:58
まだ見てるかわからんが、HibernateならScrollableResultsがある。
ResultSetと同じようなカーソル的な使い方ができるので、
適度にevict()しながら処理すればいいと思われ。

328 :デフォルトの名無しさん:2006/08/17(木) 18:09:46
正直O/Rまっぱーの利点がわからん。
簡単な表結合ならSQL書いちゃったほうが早いし
難しい表結合はO/Rまっぱーじゃ結局無理だし。
なにがいいのか俺にもわかるように説明してくれ。
DTO自動で作るだけならエクセルマクロで十分だし。

329 :デフォルトの名無しさん:2006/08/17(木) 18:22:18
そのエクセルマクロ生成コードにむかついた人が張り切ってしまって
できたのがO/Rマッパー。
むかつかない人はそのままでいいよ。

330 :デフォルトの名無しさん:2006/08/17(木) 18:29:30
>簡単な表結合ならSQL書いちゃったほうが早いし
ORMの利点は、「SQLを書かなくていい」ではない。

>DTO自動で作るだけならエクセルマクロで十分だし。
それを「車輪の再発明」と言う。
ダメエンジニアが行う愚行の一つ。



331 :328:2006/08/17(木) 18:32:31
>>330
で、結局利点はなんなのでしょうか(^^;

332 :デフォルトの名無しさん:2006/08/17(木) 18:35:56
>>329
個人の趣味で使うものってことでしょうか??
仕事で使うもんじゃないってことでFA?

333 :デフォルトの名無しさん:2006/08/17(木) 18:42:12
>>331
オブジェクトとSQLのマッピング作業をフレームワークがやってくれる点。

334 :デフォルトの名無しさん:2006/08/17(木) 18:43:03
>>329のレスから>>332のような結論が出る時点でDQNエンジニア確定だな。

335 :デフォルトの名無しさん:2006/08/17(木) 18:46:33
ぶっちゃけ俺DQNエンジニアだとおもう。
まっぱーの利点とか理解できないし。
だから教えてくださいお願いします。

>>333
マッピングってDTOつくって、ResultSetから値を取り出してDTOに入れていくってことですか?
ただそれだけですか?
そこでそんなにバグが出たり工数がかかったりしてるんですか?

336 :デフォルトの名無しさん:2006/08/17(木) 19:01:57
>>335
検索だけじゃなくて、挿入・更新のときのマッピングもね。

DQNかも知れないエンジニアを大量に使わざるを得ないプロジェクトで、
テーブル数が数十個ある場合で、カラムの追加変更などがある場合でも
フレームワークにやらせるよりも手作業の方が早くて確実なら使う必要はないだろう。


337 :328:2006/08/17(木) 19:10:21
それだけしか利点がないならやっぱ内の会社にはいらないのかもしれない。。
ほんとにそこでみんな困ってるの???
そのあたりって仮にまちがえてもテスト段階でバグ発見しやすい部分だと思うし
そもそもDTOに入れたり出したりするのなんてそんなに大変な作業でも
ないとおもうんですが・・・。

うちのシステムもテーブル150ぐらいあるし、
カラムの追加変更もときどきあるけど
一度に追加変更されるのって2、3テーブルぐらいのものだし
それだけのためにxml書いたりといった面倒な作業が
工数的、費用的ににペイするのかしら??

あたらしいもの好きな人たちが趣味でやってる領域なのでは?
実際に業務に使ってるひといるの???

338 :デフォルトの名無しさん:2006/08/17(木) 19:25:27
XMLファイルを手書きしてたらメリットは感じないたろうね。
トータルの記述量はあまり減らないし、かえって面倒と感じるだろう。
そこは自動生成するところだよ。

339 :デフォルトの名無しさん:2006/08/17(木) 19:32:14
ORM=XML設定ファイル必須というわけでもない。
S2DAOや、Hibernate Annotation、EJB3はXMLによるマッピング不要だ。

340 :328:2006/08/17(木) 19:39:49
XMLをテーブル定義から自動作成する工数と
DTOなど自分でコーディングする工数

システム開発全体にかかる工数から比較したら
これらが締めるのは微々たるものでは?



341 :デフォルトの名無しさん:2006/08/17(木) 19:51:09
>XMLをテーブル定義から自動作成する工数と
>DTOなど自分でコーディングする工数

ちがう。
テーブル定義からXMLとDTOとを自動生成する工数と
DTOを自分でコーディングおよびSQLとDTOの値の受け渡し処理の
コードを書く工数とその部分をテストする工数の合計だ。

後者の方が早くて確実なら使う必要はない。

342 :328:2006/08/17(木) 19:54:00
その2つだけをくらべたら後者のほうが遅くて不確実なんですが
OR mapperに潜んでいるバグのリスクや、
各OR mapperの使い方を覚える工数を考えたら
やっぱ使わないって判断かなあ。
そもそもわざわざ導入したところで削減できる工数が少なすぎるような気が。

あんだけ雑誌やネットで騒がれておきながら
メリットってこんだけなの?
なんかほかにメリットないのかしら・・。

343 :デフォルトの名無しさん:2006/08/17(木) 19:54:11
そう感じてて、それで本当にいい! ノープロブレム!
って思うなら、それでいいじゃねえか。

俺はDTOを自分で書くなんて冗談じゃねえが。
Hibernate Annotationでハッピーライフ。

344 :328:2006/08/17(木) 19:57:38
いや、どう感じるかは問題ではなく
客観的な指標から判断して
どちらが生産性の向上につながるのかが知りたい。

なんでこれだけのものにみんな大騒ぎしてるんだろう?
なんかあるのでは?って思ってしまう。

345 :デフォルトの名無しさん:2006/08/17(木) 20:02:51
生産性にまともな測定方法なんてネーヨ
むかつくやり方を続けると、精神衛生に悪くて生産性が下がる。
それだけ。

346 :デフォルトの名無しさん:2006/08/17(木) 20:35:55
>OR mapperに潜んでいるバグのリスク
おまいのところがGavin Kingより優秀な開発者を抱えてるならリスクとなり得るなw

347 :デフォルトの名無しさん:2006/08/17(木) 20:47:21
>>345
それは真理だな。

>>344
なんにもないから安心しろ。
頑張って車輪を発明し続けてくれ。

348 :デフォルトの名無しさん:2006/08/17(木) 21:04:21
>>346
マジレスすると、Kingよりも優秀な奴が一人いてもダメだと思う。
HibernateやS2DAOがどれだけの人に動作検証されているのかを考えると、
それ以上の動作検証ができて、はじめて
「OR mapperに潜んでいるバグのリスク」が自作コードより大きくなると言える。

349 :デフォルトの名無しさん:2006/08/17(木) 21:37:15
>>348
自作コードの方が普通は仕様が小さいから、
同程度の品質を確保するのにそこまでの動作検証は要らないけどね。

350 :デフォルトの名無しさん:2006/08/17(木) 22:30:32
ORマッパには、いままでの長い期間で発見されたパフォーマンス
改善手法がデフォルトで組み込まれている。

ORマッパの大部分は関連テーブルのレコードを自動的に取得
できる。

百人がよってたかってデバッグしたコードと、どっかの中小企業が
自分たちのしょぼいプロジェクト用に作って二人か三人でデバッグ
したコードでは、前者の方が信頼性が高い。

ただし1テーブルのデータちょっと取ってくるだけ、しかもテーブル間
リレーションもほとんどない、毎回SQLをコンパイルさせる程度の
負荷などまったく気にしない、とかなら別に使う必要はなし。

351 :デフォルトの名無しさん:2006/08/17(木) 22:36:31
大量のデータをinsertするような、バッチ的処理には向いてないね。
あくまで、オンライントランザクション処理を簡易化するためのフレームワーク。
万能ではない。


352 :デフォルトの名無しさん:2006/08/17(木) 23:09:32
まずはテーブルの構造からO/Rマッパー的に作る必要がある。
それができないプロジェクトは、リプレースするか、捨てるか。どっちかしかない。

353 :デフォルトの名無しさん:2006/08/18(金) 00:54:27
>>328
とりあえず何か動かしてみたりはしたの?
Hibernateなら、ツール使えばスキーマ読み込んで勝手にクラス作成までやってくれるから
一度適当に使って試してみたら?
結局ツール適用のメリット有無なんて、対象システムや開発環境との相性だからな

354 :デフォルトの名無しさん:2006/08/18(金) 01:31:01
>>176
忘れた頃に禿同

オレもエンティティにビジネスロジックを書きたくなってしまう。
GRASPじゃないけど、OO的に考えるなら、データに近いところへ
メソッドを寄せ集めておきたいんだよな・・・

自動生成されたエンティティをサブクラスするのはちとキモイしねぇ


355 :デフォルトの名無しさん:2006/08/18(金) 07:19:44
>>176,354
>自動生成されたエンティティをサブクラスする
ちょっと意味不明だけど

任意のクラスを継承したエンティティを自動生成できるツールがほとんどだよ

356 :デフォルトの名無しさん:2006/08/18(金) 07:48:13
>>355
クラス継承によるロジック共通化をフレームワーク単位で行うと、クラスの拡張性が著しく損なわれるので
最近は避けられる傾向にある
最近DIコンテナを使った開発で多用されているのが、委譲による疎結合。
その場合はステートレスなロジッククラスが利用される。
これとドメインモデルとの相性がイマイチなのがORマッピング利用時の問題
ORマッパー自体がDIをサポートして、ロジックを委譲するオブジェクトを注入してEntityを作成することが出来れば
ドメインモデルでも疎結合でロジックを構築できるのでは?・・・という話

357 :デフォルトの名無しさん:2006/08/18(金) 08:00:02
>>356
>>354からそこまで読み取れたらネ申だな。

358 :デフォルトの名無しさん:2006/08/18(金) 08:42:51
>>176を先に読めよw

359 :デフォルトの名無しさん:2006/08/18(金) 18:56:37
iBATIS2.2.0(β)

360 :デフォルトの名無しさん:2006/08/19(土) 00:12:40
あれ?
iBATIS2.2.0って、ストアドプロシージャと
Beanとのマッピング出来るようになったん?


361 :デフォルトの名無しさん:2006/09/05(火) 02:43:56
ついに1000体突破かよ
アイロボットみたいだな
株ロボもいつか夢を見るようになるのかなぁ

362 :デフォルトの名無しさん:2006/09/06(水) 11:11:38
貼っとく
[ThinkIT] 第7回:それぞれのメリット/デメリット (1/3)
ttp://www.thinkit.co.jp/free/article/0606/13/7/

363 :デフォルトの名無しさん:2006/09/08(金) 15:08:40
質問なんですが
Hibernateでsessionキャッシュ上の永続オブジェクトに対して
オブジェクト単位での変更チェックは出来ないんでしょうか?

bool Session#isDirty(Object o, ...)みたいなものがあればいいのですが...



364 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/09/26(火) 01:16:45
あいばてぃす?
あいべいてぃす?

366 :デフォルトの名無しさん:2006/09/26(火) 01:26:28
いーばてぃす

367 :デフォルトの名無しさん:2006/09/26(火) 01:36:02
http://ibatis.apache.org/background.html

ここ読むと

>We pronounce it: eye-BAT-iss

ってあるから、あいばってぃす?

368 :デフォルトの名無しさん:2006/09/26(火) 02:22:18
シンクイットって登録しないと読めないから資料価値ない。
グーグルキャッシュに入らないマイコムにも言えるが。

エクセルマクロ生成コードにむかついた人が張り切ってしまってできたのがO/Rマッパーなのはいいが、漏れはO/RマッパーのXMLファイル作成にムカつくのはどうすれば良い?
誰かエクセルマクロからXML生成するツール作ってない?
つーかxlsファイル自体を読み込んでO/Rマッピングしてくれってのが、.NETのノリ?

369 :デフォルトの名無しさん:2006/09/26(火) 02:44:42
>誰かエクセルマクロからXML生成するツール作ってない?
当然みんなつくってんじゅねぇーの?
一々仕様書から写す手間を考えるとそりゃマクロで吐き出させるだろうし。

こういうのってオープンソースで一個作っちゃったほうがいいよーな気もするよな。

370 :デフォルトの名無しさん:2006/09/26(火) 08:09:54
作ったらOSSとして公開でいいんじゃない?w

371 :デフォルトの名無しさん:2006/09/26(火) 13:10:33
ソースはどこにうpされてるの?


372 :デフォルトの名無しさん:2006/09/26(火) 20:32:49
会社で作ってて、パッケージ名までcom.なんとかになってるから、
さすがに公開はできんわw

373 :364: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: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 :デフォルトの名無しさん:2006/09/29(金) 01:08:11
>>368
blancoDb だろ。Excel O/R マッパー。
俺はそれを作ってる、いがぴょんっていう奴の顔がキモすぎて
試してもない。違うんかもしれんが。

377 :デフォルトの名無しさん:2006/10/07(土) 04:01:15
やっぱHibernate最高ですよね?
うちの会社に導入しようと思っています。
いまどきJDBCでSQL直書きなんて氏ねばいいと思います。

378 :デフォルトの名無しさん:2006/10/07(土) 04:23:21
導入前に氏んでいるわけだな。

379 :デフォルトの名無しさん:2006/10/07(土) 08:56:57
>>377
Hibernateがいいときもあるし、JDBCでSQL書きがいいときもあるし、iBatisがいいときもある。
最高ではない。

380 :デフォルトの名無しさん:2006/10/07(土) 09:48:02
まあいまどきJDBCのようなところはとりあえず入れたほうがいいな。
見聞を広げるちゅー意味でも。

381 :デフォルトの名無しさん:2006/10/07(土) 11:13:58
同意。
Hibernate最高とか言っちゃわない程度には触っておいたほうがいいな。

382 :デフォルトの名無しさん:2006/10/07(土) 11:46:24
適材適所。「最高」なんてものは無い。

383 :377:2006/10/08(日) 10:47:35
いや、Hibernateは上級レベルの達人たちが
ものすごい工数をかけて作成したフレームワークだ。

Hibernateありきだ。

最初に。

もちろんHibernateではダメだというケースも
あるとは思うが、まずはHibernate最高と思っておいて
問題ないのでは?

384 :デフォルトの名無しさん:2006/10/08(日) 11:14:28
JDBC APIだって上級レベルの達人たちが
ものすごい工数をかけて作成した仕様なのだが・・・


385 :デフォルトの名無しさん:2006/10/08(日) 11:25:44
妄信してる信者の発言にしか聞こえない。
結局はどれが良いのか客観的に語ってよ。

386 :377:2006/10/08(日) 11:26:36
いや、Hibernateも内部でJDBCを使っている。

どんなシステムでも大抵、JDBCを利用するための
フレームワークを作っているだろうが、
そういうフレームワークとしてHibernateに
勝てるわけがないということだ。

387 :デフォルトの名無しさん:2006/10/08(日) 14:01:29
うちなんてHibernateどころかServletすら使えないよ
DBまわりはWrapperがあるけど
BroadVision6...

388 :デフォルトの名無しさん:2006/10/08(日) 14:15:17
>そういうフレームワークとしてHibernateに
>勝てるわけがないということだ。

すげぇ盲信っぷりにワロタ。

389 :デフォルトの名無しさん:2006/10/08(日) 18:44:47
まあ言い方はあれだけどw、
日本の会社が自社で作っていたものとは次元が違う存在というのは言うまでもない。
すべてのケースに適しているとはいえないが、
使ったこともないじゃORマッパーを語れないな。

俺はjar(というか使ってるクラス)があまりにも多すぎるところがいやだな。
入れたら起動も死ぬほど重くなるし、OutOfMemoryにもなりやすい。
サーバーにいくつもHibernateを使ってるWebAppがあったら目も当てられない。

390 :デフォルトの名無しさん:2006/10/08(日) 19:11:56
そんな貧相な鯖で Java を動かすこと自体が間違ってる。

391 :デフォルトの名無しさん:2006/10/08(日) 23:17:11
フレームワークは目的ではなく手段。
無駄な残業したくないなら要件にフィットするものを選ぼう。
冷静に、冷静に。

392 :デフォルトの名無しさん:2006/10/09(月) 01:04:59
あれこれ選び分ける程の余裕もスキルもありません。
可能な限り「標準」で行きたいのだけど。

JPAはしばらく安定しないだろうなぁ・・・

393 :デフォルトの名無しさん:2006/10/09(月) 03:36:02
>>386
Hibernate に詳しいようだから、使ってみた感想でいいから
他のいくつかの O/R マッパーと比較して何かいいか
教えてくれないか?

俺には何がいいかさっぱり分からんので。

394 :デフォルトの名無しさん:2006/10/09(月) 04:56:36
まずいエサだがスレの内容には沿ってるな>393

Hibernateのよさは、資料が多いことだな。

俺はCayenne > Hibernateだと思う。複雑なクエリを
HQLで書くのは俺には無理。

395 :デフォルトの名無しさん:2006/10/09(月) 05:56:46
>>393
質問がO/Rマッパーの有用性は

396 :デフォルトの名無しさん:2006/10/09(月) 06:29:22
ごめん、途中で送信した

O/Rマッパーの有用性はわかるけど、Hibernateの優位性がわからないのか
O/Rマッパーの有用性がわからないのか、どっちなんだ

前者ならJPA実装の中でも枯れてるしData Mapperパターンでは決定版に近いってレスになるし、
後者なら、そうですねってレスになる


397 :デフォルトの名無しさん:2006/10/09(月) 11:29:44
O/R マッパー自体の有用性が分からない、つーのはスレ違いじゃね?

有用性があるのが前提で、優劣を議論するのがスレの趣旨じゃね?

398 :デフォルトの名無しさん:2006/10/09(月) 19:50:13
>>397
適用範囲を把握するという意味では、
有用性自体を問うのもありだと思ふなり

399 :デフォルトの名無しさん:2006/10/14(土) 10:05:46
ド短期製造、お前らなら何使う?
製造期間 10 日、マスタメンテ 3 機能。
DB 設計済み(複合キー)、検索条件は可変多し。
製造担当はたぶん JDBC 直以外知らない。
学習工数、製造工数の少なさを最優先。

JDBC 直、Hibernate、iBatis、DBUtils、、、

400 :デフォルトの名無しさん:2006/10/14(土) 10:20:46
>製造担当はたぶん JDBC 直以外知らない。
>学習工数、製造工数の少なさを最優先。

10日間に学習工数も含めるのなら、断然JDBC直。

フレームワークは学習コストがそれなりにかかることを
認識しておかないと痛い目を見る。
それを認識できてない奴が「生産性が低い」と騒ぐんだ。

強いて何か覚えるなら、ORMよりもDbUnitでも覚えておいた方がいいんじゃね?

401 :デフォルトの名無しさん:2006/10/14(土) 14:16:27
>>399
MS Access

402 :デフォルトの名無しさん:2006/10/14(土) 14:50:21
短期なのに学習コスト込み?てか10日?
ギャグのつもりじゃなかったらやめたほうがいいだろう。

403 :デフォルトの名無しさん:2006/10/14(土) 15:28:56
>>399
JDBC 直

404 :デフォルトの名無しさん:2006/10/14(土) 16:47:16
JDBC直よりは、closeし忘れとかを防止する意味で、
DBUtilsの方がいいんじゃない?
まあ、10日であることを考えたらJDBC直でもいっか。
悩んでいる暇があったら、早くやれって感じだ。

405 :デフォルトの名無しさん:2006/10/14(土) 17:31:45
JDBC直でResultSetMetaDataとDatabaseMetaDataをひっぱって
全テーブル同じクラスで処理する。

406 :デフォルトの名無しさん:2006/10/14(土) 18:07:12
>>399
JAVA止めて、お前がLLで作る

407 :デフォルトの名無しさん:2006/10/14(土) 23:48:22
仮に実装担当者が「色々とORM知ってます」と言ってきても
ちょっとしたもんならJDBC直(or 学習コストがかからん DbUtils)で十分。
後々メンテ担当者がチェンジする時のリスクも小さかろう。

408 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/10/15(日) 00:08:49
>>408
勉強がてらなら、もっと納期が厳しくない案件でやらせた方がよくない?
確実に作らせたいのなら、担当のスキルと日程をふまえて指示する側が見極めないとな
あと、DbUtilsにするんなら、1.0は色々問題があるからdevelop版を使ったほうがいい。

410 :デフォルトの名無しさん:2006/10/15(日) 00:33:13
可変長の引数が可能ですが、引数取り出しの扱いがわかりません。
function! AllRead(...)
while args
r args
endwhile
endfunction
どうすればいいでしょうか?

411 :デフォルトの名無しさん:2006/10/15(日) 00:50:59
>>409
thx。DbUtils か JDBC にするわ。

412 :デフォルトの名無しさん:2006/10/15(日) 00:52:05
>>410
何のハナシをしているのかわかりません

413 :デフォルトの名無しさん:2006/10/17(火) 13:36:28
Hibernate 3.2.0 GA
Hibernate Annotations も Hibernate EntityManager も同時に 3.2.0 GA

414 :デフォルトの名無しさん:2006/10/17(火) 18:53:38
ガッはなんだガッは

415 :デフォルトの名無しさん:2006/10/17(火) 23:30:51
Generally Available


416 :デフォルトの名無しさん:2006/10/18(水) 00:07:08
>>414
ぬるぽ

417 :デフォルトの名無しさん:2006/10/22(日) 21:05:50
以前ibatisで使った開発のときテーブルごとのクラスに結果を詰め込むようにしてたんだけど
結合テーブルのSQLなんかのとき都度それにあった結合テーブルクラス(必要なカラム以外もすべて定義)を使って結果を返していた

つまり結果は絶対SQLのと同じ表形式だったわけなんだけど
普通そういう設計するの?

418 :デフォルトの名無しさん:2006/10/22(日) 21:10:26
複合キーのテーブルの場合代理のキーを作ってDB設計したほうがHibernateとかでは使いやすい
と同僚が言ってた。代理キーはシーケンスで振っていくようにするといってたけど
そうすっと一意制約が保障できないような気がするが、回避方法あるのかい?


419 :デフォルトの名無しさん:2006/10/22(日) 21:19:31
>>418
UNIQUE制約ってしってるか?

PRIMARY KEYとは別にUNIQUE制約をかければいいだけだよ。

420 :デフォルトの名無しさん:2006/10/22(日) 22:18:09
>>419
そりゃそうだ。なんできずかなかったんだろ。ありがとござんした

421 :デフォルトの名無しさん:2006/10/22(日) 22:18:15
>>418
一意になるように代理キーで、作るべきだと思うけど。

422 :デフォルトの名無しさん:2006/10/22(日) 22:19:52
ああ、勘違いした。複合キーが一意であることね。
ごめん

423 :デフォルトの名無しさん:2006/10/22(日) 22:23:01
>>417
例えば、どうなってほしいの?
クラスを作るのが面倒ならば、Mapを使ってもよいと思うが、そうなるとタイプセーフではなくなる。

424 :デフォルトの名無しさん:2006/10/22(日) 22:56:42
>>423
あーたとえばですね、親子関係のテーブルなんかの場合
親テーブルクラスに、子テーブルクラスを保持するフィールドもたせて
クエリーの結果をそういう感じで保持すんのかな?とおもって。


425 :デフォルトの名無しさん:2006/10/25(水) 23:30:26
Hibernate で直に SQL 発行して結果を
Map のリストで受け取ることってできますか?

Hibernate を使わなければならず、
でも結果は Map で返さんとだめで、
entity クラスも作成できないんです。

426 :デフォルトの名無しさん:2006/10/25(水) 23:31:47
保守

427 :デフォルトの名無しさん:2006/10/26(木) 00:59:39
>>425
たぶん駄目じゃない。
Spring使ってるならJdbcTemplate。ないならDbUtilsでごまかしとけば。

428 :デフォルトの名無しさん:2006/10/26(木) 01:38:43
>>427
助かりました。
JdbcTemplate#queryForList
でごまかせるような気がします。

429 :デフォルトの名無しさん:2006/10/26(木) 02:16:00
>>425
Mapによるマッピングには対応している

http://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 :デフォルトの名無しさん:2006/11/02(木) 02:12:45
>>430
dbutils、シンプルで使いやすいから愛用してるんだけど
あんまり使ってる人いないのかな?

432 :デフォルトの名無しさん:2006/11/02(木) 03:48:26
何故だか各種ORMと比較されてショボイと思われてる感はあるかも。
個人的にはQueryRunnerがPreparedStatementを
基本、隠蔽する方向になってるのが何だか惜しいって印象。
まあ、そうしてもらうと楽な面も、もちろんあるんだけど。

433 :デフォルトの名無しさん:2006/11/03(金) 02:24:54
>>431
俺も愛用している。
設定ファイルいらずだし、MapListHandlerの結果をJSP内のELで使うと超ラクで気に入ってます。

434 :デフォルトの名無しさん:2006/11/03(金) 08:33:31
dbUtils、いいんだけどBeanHandler使うときのフィールド名とプロパティの
マッピングが普通とちがうのがちょっとなぁ。あれは直してくれんかな。

435 :デフォルトの名無しさん:2006/11/03(金) 14:55:01
>>434
普通と違う?


436 :デフォルトの名無しさん:2006/11/03(金) 18:02:24
booleanのときとか?

437 :デフォルトの名無しさん:2006/11/03(金) 21:53:02
>>434
フィールド名/プロパティ名が2語以上から成るとき、DBでは通常アンダースコア連結、
Javaはキャメルケースで表記するでしょ?
他のORMにはそこを変換してくれるものもあるけど、dbUtilsは単にcase-insensitiveで
比較するだけだから、

SELECT ID_DATA AS IDDATA

とか、

public void setId_Data() {

とか書かないといけない。

438 :デフォルトの名無しさん:2006/11/03(金) 22:48:00
DbUtilは、キャッシュも遅延ロードも無いし、
commons BeanUtilsのリフレクション使いまくりだから、目に見えて遅い。
大規模・高負荷なシステムでは使えない。

けど、シンプルで俺は好き。
自社のお問い合わせ送信フォームとか、
小規模なマスタメンテとかで使ってみたことがある。

439 :デフォルトの名無しさん:2006/11/03(金) 23:38:04
ORM使ったこと無いので教えてください。

DbUtils以外のORMはリフレクションを使わずに、Beanにどうやって格納したりしているの?
キャッシュが高速なのは分かるのですが、逆に古いデータを読んでしまうことにならないかも気になります。

440 :デフォルトの名無しさん:2006/11/03(金) 23:53:58
>>439
キャッシュとDBの同期化をどうするかというAPIも用意されている場合も多いので
アプリケーション側でも制御できるし、デフォルト設定も変更可能な多い。

リフレクションを使わず、バイトコードをゴニョゴニョしたりするフレームワークも多い。


441 :デフォルトの名無しさん:2006/11/03(金) 23:57:27
>>439
>キャッシュが高速なのは分かるのですが、逆に古いデータを読んでしまうことにならないかも気になります。
何か勘違いしてるんじゃないか。

442 :デフォルトの名無しさん:2006/11/04(土) 00:37:41
>>440
バイトコードを変えることで、リフレクション使わずにセットしてたりするのか。
それは知らなかった。かなり高度なことをしているんだな。

>>441
こう考えているんだけど、勘違いしてると思った点を教えてくれれば幸い。

キャッシュを使えば、DBにアクセスすることなく、取得済みのデータを再利用するので、高速だと思っている。
「古いデータを〜」と思ったのは、データがすでに更新されたのに、
更新前のキャッシュデータを使ってしまうことがないのか?ということを気にしている。

なんか間違ってるだろうか。

443 :デフォルトの名無しさん:2006/11/04(土) 00:42:51
>「古いデータを〜」と思ったのは、データがすでに更新されたのに、
>更新前のキャッシュデータを使ってしまうことがないのか?ということを気にしている。
ここの意味がよくわからん。
ひょっとして、複数のサーバでそれぞれ同一DBに対して
接続するとか、そういう使用法を考えてるわけ?

444 :デフォルトの名無しさん:2006/11/04(土) 01:01:50
>>438
DbUtils から BeanUtils への依存関係はないんじゃない。

445 :デフォルトの名無しさん:2006/11/04(土) 01:04:14
>>443
>>444じゃないけど、普通は考えるでしょ。


446 :デフォルトの名無しさん:2006/11/04(土) 01:07:56
>>444
すまん。勘違いしていたらすい。
リフレクションAPI直叩きだね。

447 :デフォルトの名無しさん:2006/11/04(土) 01:07:56
複数のサーバとは限らないけど、1つのDBに対して、複数の接続が発生するのが普通では?

キャッシュってのは、DBの複製的な情報を、アプリ側で保持するわけでしょ。
検索→キャッシュ生成→(他スレッドなどがDB更新)→キャッシュの値は更新前の値のまま
もちろん、ORMを使わず更新するとかが、論外なのは分かっているけど。

ここまで書いてきて気づいたのだけど、
1つのDB接続セッション内で、キャッシュされるのかと思ったけど、
全体でキャッシュを共有して持っているということ?
それならば、「更新前のデータを見ない」という意味は、理解できる。

448 :デフォルトの名無しさん:2006/11/04(土) 01:30:13
そもそも>>443みたいな設計がおかしいんじゃないか?
それともEJBのことを指しているのか?だとしたら意味が違うと思うが

449 :デフォルトの名無しさん:2006/11/04(土) 01:31:24
>検索→キャッシュ生成→(他スレッドなどがDB更新)→キャッシュの値は更新前の値のまま
                 ~~~~~~~~~~~~~~~~~~~~~~~
これ何よ。こんなことするなよ。

450 :デフォルトの名無しさん:2006/11/04(土) 01:34:37
アノテーション使えるDbUtilsが欲しい…

451 :447:2006/11/04(土) 01:39:13
>>449
えーと、シングルスレッドで、順番に更新しないと駄目という意味??

452 :デフォルトの名無しさん:2006/11/04(土) 01:44:57
Hibernateのキャッシュは2段階になってる
1次キャッシュ(Session)は一つのスレッド・トランザクションに閉じてる
自分でアクセスしたエンティティを再利用するだけだから遅延はない

2次キャッシュは複数のスレッド・トランザクションで共有されて実装を選択できる
2次キャッシュの実装に分散キャッシュを使えば複数のプロセスでも共有できる
遅延に関しては実装次第
一定時間でリフレッシュするのもあれば他プロセスから更新通知を受けるのもある
分散ロックや分散トランザクションをサポートしたものもある
当然遅延とパフォーマンスはトレードオフだから用途に合わせて実装を選べばよろし

453 :デフォルトの名無しさん:2006/11/04(土) 02:00:11
>>451
そうじゃねーべ。
Hibernateでも何でもいいから一旦勉強してくれ!

454 :447:2006/11/04(土) 02:06:22
>>452
なるほど。
1次キャッシュなら、遅延は無いものの、キャッシュとしての効果は薄いと思うし、
2次キャッシュは、どうしても遅延が発生するだろうと感じていたのです。
キャッシュを利用して高速になるからといって、やはり遅延することを無視できないわけですね。

>>441の話だと、遅延があり得ないように、聞こえたので疑問に思っただけです。

>>453 ごみんなさい。勉強しときます。

455 :デフォルトの名無しさん:2006/11/04(土) 02:13:46
だから、Hibernateのデフォルト設定では
更新前に一旦SELECTして同期するようになっている。

DBを他システムからも操作されることが想定される場合には
SELECTを含むクエリ発行のたびに毎回キャッシュと同期化するようにもできる。

他システムから操作されないのなら、キャッシュを最大限に利用する設定にすることも出来る。


456 :デフォルトの名無しさん:2006/11/04(土) 11:04:04
>>438

リフレクションやっぱ遅いのか。
ユーザ数の少ない業務アプリケーションしか作ったことないから、
SQL以外の速度気にしたことないな。。

457 :デフォルトの名無しさん:2006/11/04(土) 11:10:57
気にすることないよ実際。
>438はまともにプロファイリングしたことないかな?
相当いびつな使い方をしない限り影響はない。DBのそれと比べると誤差の範囲。

458 :デフォルトの名無しさん:2006/11/04(土) 12:31:30
なんか Hibernate & DbUtils なモードだな。

DbUtils だけど、キャッシュはともかく、遅延ロードが無いことに関しては
ナマSQLを書く以上、SQLの書き方/コーディング次第な所なんで
大規模・高負荷なシステムで使えんって理由には直結しないんじゃないかな。

459 :デフォルトの名無しさん:2006/11/04(土) 14:10:33
>>457はdbUtilを使ってまともなアプリを作ったことが無いのだろうか。

460 :デフォルトの名無しさん:2006/11/04(土) 16:02:20
大規模・高負荷とか言ってるけど、逆にそういう用途にHibernateとかのORMは
使うのを躊躇するけどな。
キャッシュがあるといっても、このレベルじゃ到底信用できないし。

実際そういうところに使っている人いる?

俺の場合、パフォーマンスが必要なところでは基本JDBC直、得失を考慮したうえで
問題ない部分ではdbUtilsを使って楽をしてもいいかな、という感じ。
Hibernateを使うのは、パフォーマンスをあまり気にする必要がないところで
ちょっと複雑なデータを永続化したい場合だな。

461 :デフォルトの名無しさん:2006/11/04(土) 16:26:06
今のHibernateはEJBの実装。
大規模システムでの利用を前提にしたプロダクトだと思うけど。

462 :デフォルトの名無しさん:2006/11/04(土) 16:42:50
元々EJBは大規模つぅか分散システムのアーキだしなあ。
パフォーマンスクリティカルな案件じゃ
JDBC直(+軽いラッパ)が実状じゃなかろうかと

463 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/11/04(土) 23:17:23
>>464
バッチには向いてないだろうね。

>>465
あなたの見解は正しいと思う。
Torqueは論外。


467 :デフォルトの名無しさん:2006/11/04(土) 23:27:07
>>449
Webアプリなんかじゃ、ふつーに別スレッドに更新されることが、あるんじゃねーの?

468 :デフォルトの名無しさん:2006/11/04(土) 23:47:26
>>467
遅いし、馬鹿だし、救いようがないな

469 :デフォルトの名無しさん:2006/11/04(土) 23:48:32
>>467
あるよね。

470 :デフォルトの名無しさん:2006/11/04(土) 23:49:05
>>465
自分で選べないくらいプロダクトの特性を理解してないなら
どれを選んでも失敗する

471 :デフォルトの名無しさん:2006/11/05(日) 00:14:54
煽ってるだけだから気にすんな

472 :デフォルトの名無しさん:2006/11/05(日) 00:53:17
しかし、なんだ。
バッチ系にもWEB系にも使えるものてのは、ありそうでないもんだな

473 :デフォルトの名無しさん:2006/11/05(日) 01:04:43
万能ってのは無いよ。数あるフレームワークを適材適所で使うのが現実的。

474 :デフォルトの名無しさん:2006/11/05(日) 05:12:40
うちでは、勉強するってモチベーションが低いのか、ちっともHibernateや他ORMが受け入れられない。
複雑なクエリ文を、しこしか書いている人たちに、HQL使えって言うのは厳しいし、
無理して使ってもらうこともないんだけど。

Hibernate最高って人は、
(実行パフォーマンスに目をつぶっても)開発側が楽だから?
それとも、(開発は多少面倒になるが)実行時に効果的だから?
もしくは、その両方?

475 :デフォルトの名無しさん:2006/11/05(日) 07:38:32
今からHibernateのAPIやHQLを覚える必要はほとんど無い。
JPA/JPQLを使えよ。

476 :デフォルトの名無しさん:2006/11/05(日) 15:30:26
開発効率も品質もそれなりの前提知識・意欲を持つ人が集まることで
ある程度保障されるものだし、何とも言えないんじゃ。

ただ、コンパクトなJDBCラッパだけで色々な案件を
問題無く捌けてりゃ、それはそれでハッピーだとは思う。

477 :デフォルトの名無しさん:2006/11/05(日) 19:30:17
>>474
実行パフォーマンスについては、上手く作ればWebアプリ等では逆に早くなることもある。
開発に関しては、たしかに覚えることは多いが、
リスナーを使ってDBのトリガーみたいな処理をプログラムを使って書けたりとか、
あとは特に排他制御実装が非常に簡単になるのが嬉しい
SQLも使えるから、難しいところは無理にHQL使わずに積極的にSQL使えばいいし
(FROM句への副問い合わせやUNION以外はだいたいHQLで書けるけど)

478 :デフォルトの名無しさん:2006/11/05(日) 19:36:19
たとえば、よくあるWebアプリの一覧検索から1件選んで更新処理とかする画面だと
一覧を取ってくる所は複雑な問い合わせ文になることが多いから
SQLをORMに投げて結果をBeanのListで受け取る。
1件選ぶ処理では主キーを渡してORMでEntityを受け取る。
そこから先はORMの機能だけで関連Entityを取って来たり、
排他制御しつつ更新処理とか全部やってくれる。

479 :デフォルトの名無しさん:2006/11/05(日) 20:09:47
排他制御ってSpringやSeasarといったDIコンテナに
任せるものと違うの?

480 :デフォルトの名無しさん:2006/11/05(日) 22:28:55
SpringやSeasarがテーブルのバージョンカラム定義や、
更新時の自動バージョンカラムチェックとかやってくれるのか?w

481 :デフォルトの名無しさん:2006/11/05(日) 22:37:53
トランザクションかとおもたw

482 :デフォルトの名無しさん:2006/11/06(月) 00:30:31
比較的S2DAOが、バッチもオンラインも対応しやすい。
Seasarのリスクを受容出来るなら、S2DAOと必要に応じてストアドあたりが、
いい感じだな。


483 :デフォルトの名無しさん:2006/11/06(月) 10:24:17
ibatisにsqlをフォーマットするクラスはありますか?

484 :デフォルトの名無しさん:2006/11/06(月) 17:20:38
プリペアードステートメントの「?」にサブクエリーなどのSQLを書いても
SQLではなく短に文字列として処理されるのでしょうか?
さらにibatisは$xx$はプリペアードステートメントの「?」で、#xx#はSQLとして展開ですよね?

485 :デフォルトの名無しさん:2006/11/11(土) 21:23:42
hibernate 3.2
hibernate annotation 3.2
hibernate tool 3.2
Eclipse 3.2

な環境でPOJO(アノテーション付き)からその他もろもろを生成したい。


486 :デフォルトの名無しさん:2006/11/12(日) 08:41:06
>>485
今普通にそれでやってる。その他もろもろってDDLくらいしかなくね?
とりあえずHibernateのサイト見ればできるようになんだろ。

487 :デフォルトの名無しさん:2006/11/12(日) 08:46:53
そういやDdlUtilsってアプリ組み込みDB初期化に便利そうなんで
早くリリースされないかなぁ。

488 :デフォルトの名無しさん:2006/11/18(土) 13:49:05
sqlを見やすいようにフォーマットしてくれるクラスありますか?
ibatis、dbutils何でもいいのですが・・

489 :デフォルトの名無しさん:2006/11/19(日) 11:55:54
一口に見易いと言っても好みがモロに出る所だと思うが、
とりあえずカンマの前後で改行入れる程度のものなら
自分ででっち上げる方が早い気もする。

490 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/11/20(月) 10:00:20
>>490
すいません。ツールは知っているのですが、管理者からPG側から整形済みをログで吐き出せといわれていまして・・・

493 :デフォルトの名無しさん:2006/11/20(月) 10:16:39
管理者ならログ整形するツールくらい用意しろよと言い返せ。

494 :デフォルトの名無しさん:2006/11/20(月) 18:45:26
Hibernateなら整形出力あるんだけどね

495 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/11/27(月) 01:33:40
・最初にloadしたデータをセッションにでも入れておく
の後、データを再度トランザクションにくくりつける。
・updateのときにもういっかいloadする
は、勝手にやってくれる。

498 :デフォルトの名無しさん: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 :デフォルトの名無しさん:2006/11/27(月) 06:50:21
ログを常時監視してる場合も有るから、人間が直接読めるってのは重要な場合も有るかと。

まあ要求するのは良いが、それならおまいが管理までやれって返されるだけだよ(w
やぶ蛇にならないようにガンガレ。

501 :デフォルトの名無しさん:2006/11/27(月) 09:13:01
ログを監視する場合はむしろSQLを整形して吐かれるのは嫌だと思うんだけどなぁ。
ログは、基本一行で全部出して欲しい派。

正規表現で取り出しやすくなるし。

502 :デフォルトの名無しさん:2006/12/06(水) 02:35:47
いつの間にか、Dbutils1.1が出てますね。

503 :デフォルトの名無しさん:2006/12/07(木) 02:23:14
Java6のJDBC4.0使った簡易O/Rマッピングってどんな感じですかね?

504 :デフォルトの名無しさん:2006/12/07(木) 02:38:46
系統的にはiBatisみたいだね。
http://www.onjava.com/pub/a/onjava/2006/08/02/jjdbc-4-enhancements-in-java-se-6.html

505 :デフォルトの名無しさん:2006/12/07(木) 22:45:10
>>498
いつも思うんだけど、Hibernateで排他制御を任せると、
複数サーバでの運用って事実上無理にならない?

JavaVM1つでしか動きを保障できないようなフレームワークが
なぜこんなに流行るのかわからない。

506 :デフォルトの名無しさん:2006/12/07(木) 22:58:32
複数サーバの並列運用が必要な案件がそんなにないからじゃないかと。
大規模案件はやっぱりEJBの出番なんでしょう。

507 :デフォルトの名無しさん:2006/12/07(木) 23:18:00
>>505
普通にHibernate経由でDBロック取ればいいじゃん。
API提供されてるし。

>>506
なんでEJB?


508 :デフォルトの名無しさん:2006/12/07(木) 23:24:00
分散を最初から考慮しているってのは確かに大きいな。

509 :507:2006/12/07(木) 23:33:33
>>506
ちょっと喧嘩売ってるみたいな書き方になった…

補足すると、そもそも並列稼動の実装ってかなり設計に依存するから
安易に大規模案件=EJBを持ち出す意味がわかんないって話。

単純なスケールアウトの話で、VMをまたいだキャッシュの同期を
意図してたならHibernateでもいくつかサポートしてるキャッシュ実装があるよ。
※Coherenceとか

ま、JBossのEJBって話だったら別に変わんないか。


510 :デフォルトの名無しさん:2006/12/08(金) 00:27:16
>>505
Hibernateの排他制御は基本的に楽観的排他で、
UPDATE文発行するときに、検索条件に主キー+バージョンカラムの値をつけ、
UPDATEの結果が0だったら排他エラーにするものだよ
同期を取っているのはあくまでもDBで、JVMは関係ないと思うけど

2次キャッシュに対する更新は、たしかに複数サーバでの運用が問題になるが
そんなときはクラスタ対応のJBoss TreeCacheを使えばいい

511 :デフォルトの名無しさん:2006/12/08(金) 01:02:00
>>510
へー、そうなのか。勉強になった。
どちらにせよ、最近は状態を頑張って各ノードで通信して同期するより、
なるべく状態非依存にしてスケールアップする方向に進んでるから、
Hibernateの挙動はあまりいくないと思う。

512 :デフォルトの名無しさん:2006/12/08(金) 01:33:17
>>511
参考までに聞きたいのだが、状態を持たない場合、複数画面の排他制御ってどうやってやるのが普通なの?
主キー+バージョン値だけを保持して、バージョン値も条件に入れて再SELECTとか?
ただこの場合、関連するEntityを同時に再SELECTする場合、全部のバージョン値を保持しなきゃいけなくなるよね
自分もHibernate使っていたとき迷ったのだが、結局HttpSessionに保持してmerge以外に良い方法を思いつかなかった

513 :デフォルトの名無しさん:2006/12/08(金) 02:15:47
>>511
Hibernateの挙動というよりは、単に2次キャッシュを使わなければ良いだけでは?
OptimisticLockも2次キャッシュ同様にデフォルトでは有効でないから
そこに文句をつけるのは違うと思う。

> どちらにせよ、最近は状態を頑張って各ノードで通信して同期するより、
> なるべく状態非依存にしてスケールアップする方向に進んでるから、

これ、そうなの?クラスタ系プロダクトの信頼度が上がってくるのはこれからじゃないのかな。
あと、下のケースはスケールアウトと間違えてない?


514 :デフォルトの名無しさん:2006/12/12(火) 18:52:08
ibatisでカスタムタグを作ることってできますか?

515 :デフォルトの名無しさん:2006/12/13(水) 23:35:57
>>514
OpenSessionInViewパターン的な仕組みとやりとりするカスタムタグを
作るってことなら、そんなに悩まずできるんじゃないの?
iBatisだろうとHibernateだろうと生Jdbcだろうと。

おれなら半日で作るね。



516 :デフォルトの名無しさん:2006/12/13(水) 23:44:54
半日もかかるのか。イラネ。

517 :デフォルトの名無しさん:2006/12/14(木) 00:06:28
タグ作って、テストして、プロジェクトの他メンバーに仕様を伝えるためのドキュメント作って・・・
としていたら半日なんてあっという間。

518 :デフォルトの名無しさん:2006/12/14(木) 01:45:16
ibatisの設定ファイルに書くタグのことじゃね?

519 :デフォルトの名無しさん:2006/12/15(金) 11:03:54
gcの対象って、インスタンスだけじゃなくてクラスも対象なんですか?
クラスに定義してあるメソッドの実行コードもメモリから消えちゃう?

Cをやっていたとき、実行コードはメモリのtextにロードされるから、
textエリアは書込み禁止なはずなので・・・、javaでは実行コードはtextに書かないのかな


520 :デフォルトの名無しさん:2006/12/15(金) 12:26:48
>>519
スレ違いなので簡単に。詳細は別スレで語って。
ttp://www.nminoru.jp/~nminoru/java/class_unloading.html

521 :デフォルトの名無しさん:2006/12/23(土) 01:54:12
JBOSSなんて実運用で使ったら軽く死ねるよ。
コストかけても商用のEJBフレームワークを採用した方が、ロードバランサも不要で安くつく。

syslogやsnmpで監視しても、最後はopenviewのSQL DBに突っ込んでるしねえ。
加工することを考えると、SQL DBにログを突っ込むのは悪くはない。
syslogのテキスト処理しか出来ないperl廚が困るだけでしょ。DBIぐらい覚えろよと。

522 :デフォルトの名無しさん:2006/12/23(土) 02:10:02
GlassFishでいいんじゃね?

523 :デフォルトの名無しさん:2006/12/23(土) 04:50:43
>>521
知ったかぶり乙。

524 :デフォルトの名無しさん:2006/12/23(土) 08:45:01
ほんとに意味不明だなw
ある種の才能。

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

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

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)