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

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

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

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

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


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

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

おれなら半日で作るね。



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

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

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

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

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


520:デフォルトの名無しさん
06/12/15 12:26:48
>>519
スレ違いなので簡単に。詳細は別スレで語って。
URLリンク(www.nminoru.jp)

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

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

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

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

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

525:デフォルトの名無しさん
07/01/08 12:20:52
HOS

526:デフォルトの名無しさん
07/01/17 22:43:07
取得する列を可変にしたいのですが、iBatisではどうやればいいですか

527:デフォルトの名無しさん
07/01/18 00:00:12
DBの型とJavaの型マップのデフォルト値を取得する方法ないでしょうか?
java.sql.Connection#setTypeMap で型マップの上書きができるのは、分かったのですが・・・。


528:デフォルトの名無しさん
07/01/18 02:01:48
フレームワークとは直接関係ないんだけど、良いDAOの作り方というのが
いまいちわからん。
検索条件が複雑なユースケースがたくさんの場合、メソッドの引数やDTO
だとすげー煩わしくなってくるんだけど、みんなはどう対応してる?

529:デフォルトの名無しさん
07/01/18 23:59:20
>>528

検索はほぼDTOですね。。
あとで変更があっても影響範囲極小にできるから

530:デフォルトの名無しさん
07/01/19 01:26:04
DTO でもめんどいと、もう Map しかないよね。

うぇーって感じだけど、DTO 書きが面倒というような規模
(ビューからDAOまで自分一人とか)なら、Map は割と現実的な
解だと思ってる。

531:デフォルトの名無しさん
07/01/19 01:29:16
SELECT文からDTOを児童生成するようなフレームワークって無いのかな?
Velocityとjava.sql.ResultSetMetaData使えば結構簡単に作れそうな気がするけど。
一時期作ってたけど、
同僚のマの人がせっせこ作ってくれるんで途中で投げた。

532:デフォルトの名無しさん
07/01/19 01:58:10
Hibernate以外でDAOでオブジェクトを生成するとき、みんなどこまでの階層を読み込んでる?
基準とかあるのか?

533:デフォルトの名無しさん
07/01/19 02:01:17
あるあるww

534:デフォルトの名無しさん
07/01/19 12:18:29
Mapが面倒ならRowSet使うのがいいと思われ

JPAとかこれから普及すると思うが、テーブル単位で扱うのが常識なのだろう
RDBに慣れた人ならjoinつかって重複するデータ部分も生成してすべてOneToOneでつなげれば今までと同じように使えるし
既存コードからの変更はわりと容易

535:デフォルトの名無しさん
07/01/19 19:14:25
もれのORマッピングに関しての認識がどうも間違ってるみたいなので教えてください。

ORマッピングフレームワークにはHibernateやToplinkなどが一昔前からあり、
最近JPAというものが登場し、JAVAEE5、SE6にも取り込まれている。JPAはEJB3.0でも使用されている。
JPAはコアの部分にtoplinkを使っていてtoplinkエッセンシャルと呼ばれる?
なんかよく分かんないのですがあってます?

536:デフォルトの名無しさん
07/01/19 20:00:39
あってない
まずJPAはEJB3.0の中のひとつ
ただし、JavaSEでも使えるように独立している

toplinkはJPAの実装のうちのひとつででリファレンス実装となっている
サーブレットコンテナのリファレンス実装だったTomcatと同じような位置づけ

537:535
07/01/19 20:32:39
>>536
ありがとうございます。
なんとなく理解できました。
EJB3.0の中にいたJPAは独立可能なのでSEにも加えられて、
toplinkとJPAの関係は Myfacesとjsfみたいなもんというわけですね。
めもめも

538:デフォルトの名無しさん
07/01/19 21:13:28
JavaSE6にJPAは取り込まれてない

539:デフォルトの名無しさん
07/01/19 23:56:48
すみませぬ。質問させてください。
取り出したレコードがコード値(性別とか)を保持している場合、0 -> 男性 などのマッピングはいつ行えばいいのでしょうか。
あとDTOにコード値とマッピング後の文字列、両方を保持するのが一般的なのでしょうか。

540:デフォルトの名無しさん
07/01/20 00:03:15
そのへんは突き詰めるとSEXSテーブルを作ってSexオブジェクトを作って…。みたいになりそうだ。
enumうまく使えたら良いのかな?

541:デフォルトの名無しさん
07/01/20 01:15:37
>>539

DTOにマッピングの文字列を取得するメソッド作成するかな。。
確かにこういうの迷いますよね。。

542:539
07/01/20 11:34:33
SQLで結合してしまえばいいともおもうのですが(iBatis使ってるんで)顧客とかって結構コード値で管理してるデータが多いじゃないですか。
SQLのFromにだらだらと並べるのも嫌だし。。。
今のところマスタ系のデータはグローバル領域で保持して、View(jsp)でマッピングするという流れになっています。

543:328
07/01/21 02:02:35
マッピングはviewじゃないかな?

544:デフォルトの名無しさん
07/01/21 21:32:58
viewかー

545:某スレ167
07/01/22 01:48:20
んと、今まではシコシコと自作でDAO書いてたのですが、DI×AOPの導入と一緒にフツーのORMも勉強してみようと思い立ちました。

HibernateはどーしてもあのHQLとXDocletが好きになれず、Seasar2+S2Daoをしばらくいじってみましたが、Spring Remotingにかなりクラっと来て、他のORMももう少し深く調べてみようと思いました。
PHPな人でもあるので、両方で(ある程度)知識を共用できるORMということでS2Daoとblanco、DI×AOPするならS2Daoという筋道で選択しましたが、Hibernateにコストをかけるべきかで少々迷っていますが、どんなモンでしょう?

今のこころは、とりあえずはDbUtilsやSpringJDBCを手早く身に付けておいて、続きはJPAというふうにしたほうがいいかな?、と思っています。
今日買ってきた「Spring2.0入門」を読んだ限りでは、ActiveRowMapperが正式リリースされればSpringJDBCはかなり使い勝手がよいという印象を持ちました。

自分でいくつかDAOを書いた限りでは、結局1:Nマッピングや複雑なビューの生成は自分で書くしかない、って思ってしまうんですよねぇ。
設計がまずいだけかもしれませんが、結局はそのあたりもビジネスロジックとは完全には無縁ではいられないのだから、1テーブル/1レコードをそのまま扱うDAO/DTOを基底クラスとして作って、
テーブル同士の関連は(ある程度のビジネスロジック込みで)ファサードとして纏める、なんてことをしてしまっています。
もっとも、これはあまり深くまで勉強せず、かじったどころか舐めた程度でしかない者の浅はかな感想かもしれませんが……。

追伸
それでもSeasar2の自動コンポーネント登録/自動アスペクト登録にはまだ魅力を感じています。ありゃ便利です。
人はこうやってSeasarの重力に魂を引かれていくのか……(苦笑)
ま、これは本当の余談ですけどね(^^;

546:デフォルトの名無しさん
07/01/22 02:07:54
S2/S2DAOはいいと思うよ。
Hibernateを今から覚えるぐらいなら、JPAを覚えて、
HibernateはJPA実装として使うという位置づけでいいんじゃないか?

547:デフォルトの名無しさん
07/01/22 18:59:48
>>545
Hibernate使ってる身としては、もう1:Nマッピングとかを自分で書く気にはなれないな
DBの定義に関する情報は、フレームワークがスキーマ読み込んでクラスまで自動作成すべき
たしかにHibernateの学習コストの高さはネックだけど、
JPAが出たおかげで、マッピング周りはかなり簡単になったと感じてる

548:デフォルトの名無しさん
07/02/08 10:01:15


549:デフォルトの名無しさん
07/02/18 16:37:27
え?

550:デフォルトの名無しさん
07/02/19 22:28:19
iBatis
abatorConfigでsqlMapを自動生成するとかなりいろんな条件いれてくれたり、XXXExampleとか作られるのがうざいんだけどなんとかならない?

551:デフォルトの名無しさん
07/02/24 13:02:37
Hibernate...
いちいち関連を定義しないと外部結合できないのはなんとかならんのか。


552:デフォルトの名無しさん
07/02/24 14:48:47
>>551
それがあるから、Entityに関連書きまくることになるんだよなぁ

553:デフォルトの名無しさん
07/02/25 01:51:51
>> SELECT文からDTOを児童生成するようなフレームワークって無いのかな?

DBFluteとDolteng はSQLからS2Dao用のDTOを生成してくれるよ

554:デフォルトの名無しさん
07/02/25 12:14:08
>>553
そりゃあもちろん、SELECT文はDTOを出産しない>児童生成

555:デフォルトの名無しさん
07/02/26 10:36:09
認知してよ!

556:デフォルトの名無しさん
07/02/26 12:29:29
>>551
SQLを意識するならHibernateを使わないほうが良いと思われる

むしろXMLで定義するだけでオブジェクト間関連を永続化してくれるのはありがたいと思え

557:デフォルトの名無しさん
07/02/26 15:47:06
Hibernate は先にオブジェクトがあって、
永続層がたまたまRDBでしたって感じで使わないと
無駄に時間かかるだけだな・・

何故俺の行く先はロクに正規化もされてない神聖不可侵な
クソスキーマがアプリオリに存在してるのばかりなのはなんでなんだぜ。

558:デフォルトの名無しさん
07/02/26 15:53:29
>>557
っ「転職」

559:デフォルトの名無しさん
07/02/27 23:38:39
>>558
たぶん、>>557の転職先でも、同じようなDB設計になるはずw
つまり、それは運命www

560:デフォルトの名無しさん
07/02/27 23:43:16
>>556
外部結合と、SQLを意識するしないは関係ないよ。
(SQL特有のものだったら、そもそもHQLにouter joinなんて単語は出ない)
単に機能が不完全なだけ。実装が面倒だったんだろ。
内部結合は関連なくてもできるしね。


561:デフォルトの名無しさん
07/02/28 01:21:12
HQLでのouter joinとかって苦肉の策だと思うのは俺だけか?
普通なら結合条件つけなくていいと思うんだが・・

562:デフォルトの名無しさん
07/02/28 02:44:43
>>561
FETCH JOINで使ったり、SELECT new ...()で外部結合テーブルのカラムを含めるときに
普通に使ってるが、なぜつけなくていいと思ったの?

563:デフォルトの名無しさん
07/02/28 22:16:10
>>562
お前、全然オブジェクトで考えられてないのなwww

564:デフォルトの名無しさん
07/03/01 00:19:50
>>563
考えられてないでいいけど、なぜつけなくていいと思ったの?

565:デフォルトの名無しさん
07/03/01 00:35:19
>>564
オブジェクト中心に考えてるとつけなくていいから

566:デフォルトの名無しさん
07/03/01 00:36:28
>>564
HibernateってORマッピングフレームワークだぞ。
Object-RDBだぞ。
Object中心に考えないとおかしい使い方になる

567:デフォルトの名無しさん
07/03/01 01:08:45
FETCH JOINは通常パフォチューで使うもので、オブジェクト中心とか関係ない
N+1セレクト問題を避けるため、関連を全てLAZYで定義して
HQLのFETCH JOINを使うのがHibernateの常套手段
また、レポートクエリをEntityのみで無理矢理行うのは馬鹿げている
HQLならSELECT new、またはSQLQueryで普通にSQL発行すればいい
全てをEntity中心に行うのは無理で無駄。
Entityは排他制御+登録・更新処理で威力を発揮する。
レポート機能はSQL中心に考える。適材適所で使えばいいんだよ

568:デフォルトの名無しさん
07/03/01 11:58:30
>567
俺ならレポート部分はJDBC使う

569:デフォルトの名無しさん
07/03/01 11:59:41
> N+1セレクト問題を避けるため、関連を全てLAZYで定義して
> HQLのFETCH JOINを使うのがHibernateの常套手段
どこかに資料ありますか?

570:デフォルトの名無しさん
07/03/01 15:08:26
>>569
Hibernate in Action

571:デフォルトの名無しさん
07/03/01 21:21:24
そういやiBatis in Actionの訳本出ないかな〜

572:デフォルトの名無しさん
07/03/01 22:31:13
レポートとか統計取るときにオブジェクトで考えてもおかしくなるだけだもんな。

そーゆー時には統計に優れれた言語であるSQLを使うのがやっぱり正しい。

573:デフォルトの名無しさん
07/03/02 09:18:32
RDB-Objectマッピングフレームワークの方がよくね?

574:デフォルトの名無しさん
07/03/02 12:31:06
つまりJava以外の話をしたいってこと?

575:デフォルトの名無しさん
07/03/02 13:11:16
O/R でなく R/O になってるところがポイントじゃね?
Object の永続層に RDB 使うためのマッピングフレームワークではなく、
RDB が先にあって、プログラミング言語から簡単に使うためのフレームワークなのでは。

576:デフォルトの名無しさん
07/03/02 13:45:57
DBを最初に考えて使いやすいものを
となるならJDBCRowSet使えばいいじゃない

577:デフォルトの名無しさん
07/03/02 15:25:12
データ構造はRDBのER図+正規化で決定するけど、プログラムはオブジェクト指向でやりたいのよ

578:デフォルトの名無しさん
07/03/02 15:52:08
なら普通にJPAでいいだろ

579:デフォルトの名無しさん
07/03/02 15:59:26
JPAはObjectありきじゃね?

580:デフォルトの名無しさん
07/03/02 16:35:48
俺もRowSetにいっぴょ。

データをハンドリングする部分がオブジェクト指向で書ければ、
データそのものは生っぽくてもいいよ。


581:デフォルトの名無しさん
07/03/02 16:47:55
>>579
先にDBを定義しておいても使えるし、先にクラスを定義しておいても使える
どっちがメインかなんて意味なさ杉

582:デフォルトの名無しさん
07/03/02 17:09:31
おれはオブジェクト図を先に作るほうだけど、
ER図でどうなるかとか、SQLで結合しやすいかなどは考えながらやってるよ。
そういう意味じゃO-R-Oマッピングくらいか。

HQLやEJQLを使えば何でもできるというのはなんか違う気がする。
こいつは必要悪とは言わないがある種の妥協なんだと思う。

583:デフォルトの名無しさん
07/03/02 23:07:58
iBatis
テーブルごとにsqlMapを分けてるんだけど、
呼び出し側でnamespace意識して呼び出すことってできないの?


584:デフォルトの名無しさん
07/03/05 01:24:38
RDB使う時点で、性能やコーディングやりやすさはRDBの方に制約が大きいから、RDBの比重を大きくしたほうがしたほうがいいと思う。

585:デフォルトの名無しさん
07/04/08 01:06:34
こんな過疎スレがあったとは・・・・・・

586:デフォルトの名無しさん
07/04/12 19:09:54
hibernateなんだけど、one2many to many なテーブルをone2manyなBeanにする方法ってありますか?
具体例を挙げると、ショップとカタログと商品のテーブルがあるとすると
カタログテーブルはショップIDと商品IDのユニークな組み合わせを持ってて、他にカラムは無い状態。

実際はあるオブジェクトに対してカスタム属性を付加するアプリなんだけどね。

587:デフォルトの名無しさん
07/04/13 01:36:02
>>586

Chapter7.Association Mappings
URLリンク(www.hibernate.org)

試してなくて申し訳ないんだけど、ここに書いてある「join table」使ったマッピングじゃだめ?

588:デフォルトの名無しさん
07/04/14 00:43:39
586って、いわゆる many-to-many だと思うんだけど、違うの?

589:デフォルトの名無しさん
07/04/14 02:15:57
どう見てもただの many-to-many です。

590:デフォルトの名無しさん
07/04/14 19:00:53
カタログがリンクテーブルっぽいけど、商品から見たショップは1だろうからmany-to-manyではないんじゃないの?
よくわかんないけど。

591:デフォルトの名無しさん
07/04/14 19:17:24
>>586は「one2many to many 」って言ってるじゃないか
それがなんだかわからんが

592:デフォルトの名無しさん
07/04/14 19:49:12
カタログテーブルの商品IDがユニークなんだろ

593:586
07/04/17 18:45:14
ただのmany-to-manyのようでした。
カタログテーブルにあたるビーンを作ってしまったのが混乱の元のようで。

594:デフォルトの名無しさん
07/05/10 00:19:39
とっぷりんくあげ

595:デフォルトの名無しさん
07/06/23 18:25:45
データベースのコード値ってプログラムではどういうふうに管理してますか?
定数だけを集めるクラスを作ったり、列ごとの列挙型のクラス作ったりするのが普通なのですか?

596:デフォルトの名無しさん
07/06/23 18:34:07
ご自由に

597:デフォルトの名無しさん
07/06/23 20:46:11
・直値(マジックナンバー)
・const値
・enum挙
・ステートパターン
選択肢ってこれくらい?

598:デフォルトの名無しさん
07/06/23 23:25:41
エンティティクラスで const 定義してる。
基本的に、対応するカラムの型にあわせたconstを用意。

599:デフォルトの名無しさん
07/06/23 23:35:58
ステートパターンが使えるとこでは使うのが自然かな

600:デフォルトの名無しさん
07/06/24 08:30:24
エンティティでカプセル化でしょうな

601:デフォルトの名無しさん
07/06/24 14:02:08
>>597
揚げ足とりでスマンけど、直値って言うか?
immediateは即値じゃね?

602:デフォルトの名無しさん
07/06/24 23:53:07
回答いただきありがとうございます。
エンティティクラスとステートパターンがわからないので出直します。

603:デフォルトの名無しさん
07/07/11 10:15:30
aaaaa

604:デフォルトの名無しさん
07/07/13 10:49:14
各DBのテーブル定義などを取得するための共通IFをもったライブラリってありますか?

605:デフォルトの名無しさん
07/07/13 12:15:09
>>604
JDBC

606:デフォルトの名無しさん
07/07/13 14:25:25
>>605
例えばgetTableInfo()みたいなものがあって、使用者側はどのベンダー化を意識しなくてもいいってこと?

607:デフォルトの名無しさん
07/07/13 14:36:27
ある程度意識しないとダメだがな

608:デフォルトの名無しさん
07/07/13 14:52:45
>>607
ありました
DatabaseMetaDataのgetColumns、getTables

609:デフォルトの名無しさん
07/07/13 23:33:47
activerecord

610:デフォルトの名無しさん
07/07/13 23:34:40
hibernate

611:デフォルトの名無しさん
07/07/18 18:48:27
sql分を解析するライブラリって知ってます?

612:デフォルトの名無しさん
07/07/19 00:52:22
>>611
JavaCCとかAntlrとか

613:デフォルトの名無しさん
07/07/23 20:03:22
すみませんが、教えてください。

例えばhibernateで、1対多の関係のあるテーブルをone-to-manyで関連付けた場合、
「1」側のデータを取得した際に「多」側の関連するデータのインスタンスを
すべて作成してしまうんですよね?1万件のデータであっても。

最初の10件・・のような、ページに分けて表示するようなWEBアプリの場合、
最初の10件分のインスタンスだけが取得できればいいと思っているのですが
多側のインスタンス数のコントロールとかできるのでしょうか?

もしくは、みなさんこんな場合にはどのようにしているのか教えていただけると嬉しいです。

よろしくお願いします。

614:デフォルトの名無しさん
07/07/23 21:00:10
>>613
取得することも出来るし、しないこともできる

JPAでもそうだよ
基本はLAZYだろうね

615:デフォルトの名無しさん
07/07/24 12:49:13
>>614
ありがとう。
> しないこともできる
っていうのはどういう風にやるのでしょうか?出来たら教えて欲しいです。
次の10件とか、どうやるんだろう?
LAZYにして、必要な分だけloopするとかですか?ん?違うかな。

それと、もう一つ教えてください。
hibernateで、例えばマスターデータの追加ではなく編集の画面で、
入力画面→確認画面→結果画面って流れで、
入力画面から取得した値をhibernateから取り出したエンティティの
プロパティ値に直接書いちゃうと、確認画面を表示するところで、
updateされちゃうじゃないですか。
普通は、このような流れの時には、hibernateから取り出しエンティティの
値をDTOなどにつめ直してセッションとかにぶち込んでおいて、
最後にDTOの値をエンティティに書き戻したりするんでしょうか?
うーん、伝わるかなぁ・・・。
よろしくお願いします。

616:デフォルトの名無しさん
07/07/24 13:51:11
>>615
標準APIであるJPAの実装では1:nのデフォはLAZY
なにもアクセスしなければ連結先は取得されない

後半の文はおかしくないか?
実装次第だが仮にエンティティにデータを入れたところで勝手にupdateされるか?
WEBアプリなら入力専用にデタッチされたエンティティわたしてもいいし、
入力専用のBeanでわたしてもいい(これが普通)

スタンドアロンアプリなどではトランザクションでコミットしなければそのままだし
コネクションの持ち方と運用次第としか

ループ命令はfor文とwhile文のどちらがいいですか?といってる感じがしてどうもなぁ

617:デフォルトの名無しさん
07/07/24 14:37:38
>>616
ありがとうございます。
> 標準APIであるJPAの実装では1:nのデフォはLAZY
> なにもアクセスしなければ連結先は取得されない
なにもアクセスしなければ、取得されないのは判るのですが、
ちょっとだけとか、ある範囲(20件目〜30件目など)だけ取得したいのに、
全件取得されちゃうんじゃないかと・・・?違うんですかね?

> 後半の文はおかしくないか?
すんません。
> 実装次第だが仮にエンティティにデータを入れたところで勝手にupdateされるか?
ええ。例えば先の例(WEB)で、
1.エンティティを取得→入力画面にエンティティの情報含めて表示。ユーザーが入力してOKする。
2.おんなじエンティティを再度取得して、入力データでそのエンティティのプロパティを変更してセッションとかに入れる
  →確認画面に編集後のエンティティの情報を表示
3.OKが押されたなら、その編集後のエンティティを取り出して、update

って流れで考えていたのですが、2.の終了段階でflushされて、その時エンティティの状態が変更されているから、
updateしちゃうんですよ。てっきりupdate(entity)メソッドを発行しない限りupdateされないかと思ってたんですけど
・・・って、私が試したのはhibernate2だったんですけど。今は違うのかな?
すみません。

618:デフォルトの名無しさん
07/07/24 15:06:30
それ、デタッチしないでセッション(=トランザクション)が開いたまま
使ってたんじゃないの?それだと update しなくても、セッションが
終了するときに、自動的に更新されるよ。

セッションって、webじゃなくてhibernateのほうのね。

619:デフォルトの名無しさん
07/07/24 16:11:49
>>618
ありがとうございます。
そうですね、デタッチしてなかったです。
そもそも、設計自体がよろしくないんですね。きっと。
専用のBeanを使うのがやはり普通なのでしょうかね?

なんとなく、入出力用のBeanを使うと、beanとエンティティとの間でプロパティのコピーを
しなきゃいけなくって、そうするのもわずらわしいと思って、
直接エンティティを操作していたんですけど、←これがわるいんですね。きっと。
勉強になりますた。

どなたか>>617の前半の部分も解決させていただけると助かります。
よろしくお願いします。教えて君ですみません。

620:デフォルトの名無しさん
07/07/24 18:56:52
UIはUIで割り切ったほうが良いんじゃないのか?

例だけど、エンティティでは電話番号というデータ1つだけど、
UIでは-区切りの入力欄にするとかあるし・・・


621:デフォルトの名無しさん
07/07/24 22:26:58
一部分だけの検索がほしいってlimitとか条件で絞るって話のことか?
それならEAGERでいいっしょ
まぁLAZYでもその程度問題ないけど、全件取得して処理するのはおかしい

O/Rマッパというのはキャッシングも利用するからSQLが投げられるとも限らないからね
運用すればわかるがLAZYだから遅くなるとは限らない


622:デフォルトの名無しさん
07/07/24 22:27:52
>>620
フレームワーク次第じゃない?
ハイフン区切りや複数のコンポーネントの結果が1つのフィールドになるようなら何にも問題ないし

623:デフォルトの名無しさん
07/07/25 08:28:56
>>619
> ちょっとだけとか、ある範囲(20件目〜30件目など)だけ取得したいのに、
> 全件取得されちゃうんじゃないかと・・・?違うんですかね?

違うよ。LAZY LOADだとforループとかで21-30件目を
DTOなりにコピーするたびに

SELECT ... FROM ... WHERE ID=?

が発行されるだけ。なので計10回クエリーされるけど全件は取得されない。

SQLの効率をよくしたいなら、
JPQLなりHQLなりで必要な範囲だけ一回で取り出しておいて
コピーすればいい。

624:デフォルトの名無しさん
07/07/25 08:50:03
なんか、話がOneToManyとManyToOneでずれてる気がする

625:デフォルトの名無しさん
07/07/25 08:56:45
そもそもは
Maker m = getSingleResult("select m from Maker m");
ってやって
List<Product> products = m.getProducts();
ってやったときにproductsが1万件あったらどうするの?ってことじゃないの?

626:デフォルトの名無しさん
07/07/25 23:37:08
select m top 30 from Maker

627:デフォルトの名無しさん
07/07/26 00:10:29
>>625
そんなあほな話じゃないだろ・・・




さすがにそう思いたい

628:デフォルトの名無しさん
07/07/26 01:37:40
List<Products> products =
 em.createQuery("select p from Products p where p.maker = :maker").
  setParameter("maker", m).setFirstResult(20).setMaxResults(10).getResultList();

629:デフォルトの名無しさん
07/07/26 01:40:12
SQL書いたほうが早いな

630:デフォルトの名無しさん
07/07/27 01:37:22
>>628
OneToManyの意味ね〜

631:デフォルトの名無しさん
07/07/27 17:23:31
何千行もあるようなSQL書いて悦に入ってる香具師が
まだこの世には存在しているという事実にナッカリ。

632:デフォルトの名無しさん
07/07/27 20:19:50
昔の方がSQLの長さに理不尽な制限があったりしたような気がするが

633:デフォルトの名無しさん
07/07/27 23:39:38
今だってOracleの場合 VARCHAR 4000 Byte の制限やテーブル名、カラム名の長さ制限には泣かされてるがな。

634:デフォルトの名無しさん
07/07/27 23:49:49
H2はLIKEがCLOBにも使えて感動した覚えがある。
たしかOracleって無理だったよね?

635:デフォルトの名無しさん
07/07/27 23:56:39
何千行もあるようなSQLを書くような輩が発生する
危険性があるので、O/Rマッパー使いなさいってのは無理がある

636:デフォルトの名無しさん
07/07/28 08:33:07
何千行もあるようなSQLがORマッピングで解決できると思ってるやつは、ORマッピングの意味を間違えている。
データベースにやらせてた処理をJava側にやらせるためにあるもんじゃない。

637:デフォルトの名無しさん
07/07/28 10:07:04
長いSQLが必要な処理ってのはある

O/RマッパとSQLは排他ってわけじゃないし
それぞれ利点と不利な点がある


638:デフォルトの名無しさん
07/07/28 10:54:56
ワイルドカードあるのに実質的に使えないのが癌だな
ついついカラム名を2〜3文字にして
エイリアスも極力短めに(ry

639:デフォルトの名無しさん
07/07/28 14:17:05
JPAでは
select count(*) from Employee e
は使えないのでつか?


640:デフォルトの名無しさん
07/07/28 14:26:19
select count(e.id) from Employee e
とかじゃないかな

641:デフォルトの名無しさん
07/07/28 14:29:38
どうもでつ

642:デフォルトの名無しさん
07/07/28 14:37:34
select count(e) from Employee e
でもおk

643:デフォルトの名無しさん
07/07/28 20:01:35
またまたありがとでつ
そちらの方を使うことにしまつ

644:デフォルトの名無しさん
07/08/07 22:08:14
Java永続化APIの次期バージョン、"JSR 317"として仕様策定プロセスへ
URLリンク(journal.mycom.co.jp)

既存バージョンからの主な変更点は以下の通り。

・組み込みオブジェクトのコレクションサポート
・組み込みオブジェクトの多段ネストをサポート
・Orderd Listのサポート
・アクセスタイプの組み合わせをサポート
・JPQL(Java Persistence Query Language)の拡張
・Criteriaの導入
・クエリとエンティティマネージャの設定ヒントの標準化
・DDL生成とJava2DBマッピングのための追加メタデータの標準化
・Bean Validation(JSR-303)のサポート

645:デフォルトの名無しさん
07/08/07 23:56:23
ポイントは
・Orderd Listのサポート
・クエリとエンティティマネージャの設定ヒントの標準化
・Bean Validation(JSR-303)のサポート
あたりかな

気になるのはenumが使いたい場合ってのが結構あることかな

たぶんJPAで一番ほしいのはDBのデフォルト値を有効に出来るような仕様だろうな
開発、運用していて一番これが厳しかったりする

646:デフォルトの名無しさん
07/08/08 00:28:41
Criteriaの導入が気になる。

Hibernateの仕様をベースにすんのかな?
あれはSQLと違って条件に応じて結合するテーブルを
動的に変化させるような使い方の場合に便利だと思う。

Hibernateではちょっと実装面がアレだったけど、
JPAだと安定しやすい仕様になってくれるんだろう。

647:デフォルトの名無しさん
07/08/08 00:42:05
Criteriaが必要になるときってそんなにない

というか、ある程度のことをやろうとしようとするとどうせJPQLを組み立てることになって
Criteriaでまかなえないことも多そうだし

LAZYなどの厳密化がほしいかな
デフォだとめちゃくちゃ検索の連鎖する場合が多すぎる

ただ、鯖だとキャッシングしまくるからパフォーマンスの問題はでないんだけど
クライアントからのアクセスがおわっとる

せっかくSwingとの親和性がよくなりそうなのにC/S無視するのはどうかと
社内アプリならわりとC/Sもシェアあるぜ
まだまだ50%は超えているんじゃないかな

648:デフォルトの名無しさん
07/08/12 14:18:04
>というか、ある程度のことをやろうとしようとするとどうせJPQLを組み立てることになって
>Criteriaでまかなえないことも多そうだし
具体的にはどういうケースですか?

649:デフォルトの名無しさん
07/08/12 15:49:31
>647の知識はHibernate2で止まってるとみた。

650:デフォルトの名無しさん
07/08/13 10:57:08
dblってかなりよさげじゃない?

651:デフォルトの名無しさん
07/08/14 09:57:59
>>650
まちがえ、ddlutils

652:デフォルトの名無しさん
07/08/15 14:40:24
>>649
激しく同意

653:デフォルトの名無しさん
07/08/17 01:57:00
>>649
JPQLってINを上手く扱えるようになったのか・・・

654:デフォルトの名無しさん
07/08/17 05:22:41
>JPQLってINを上手く扱えるようになったのか・・・
過去のJPQLがINを上手く扱えなかったような記述だな。
過去のJPQLって?w


655:デフォルトの名無しさん
07/08/17 21:32:58
INで配列使えるの?

656:デフォルトの名無しさん
07/08/17 22:12:54
653がどうして649への安価なのかが理解できない

657:デフォルトの名無しさん
07/08/18 00:34:59
>>656
禿げしく同意
全くもって理解不能

658:デフォルトの名無しさん
07/08/18 00:52:11
JPAもまともに触ってないやつおおすぎ


659:デフォルトの名無しさん
07/08/18 01:40:33
「JPAも」って言うほど評価・実績のあるものではないんだがな。

660:デフォルトの名無しさん
07/08/18 03:23:45
JPAも(Hibernateも)まともに触ってないやつおおすぎ

661:デフォルトの名無しさん
07/08/18 13:25:34
仕事には必要ないでしょ。趣味ならいいけど。

662:デフォルトの名無しさん
07/08/19 12:25:58
661が仕事で使ってるものは、おれには仕事に必要ない。趣味ならいいけど。
そういう話か?

663:デフォルトの名無しさん
07/08/19 14:56:37
iBatisを使っています。
updateをするときは1回主キーで検索した結果のビーンを渡すが普通でしょうか?
1つのテーブルを更新する個所が複数あって、その都度、updateのバリエーションが増えてきてしまっています。
私はORMを今回はじめて使うのであまり口を出せないのですが、こういうものなのでしょうか?

664:デフォルトの名無しさん
07/08/19 15:54:47
>>662
そういう話w

665:デフォルトの名無しさん
07/08/19 19:04:38
>>663
普通のO/Rマッパは変更のあった箇所のみupdateを発行する
薄いラッパほどそのままなので把握がしやすいともいうが、チューニングしていくのは面倒かも

666:デフォルトの名無しさん
07/09/01 15:45:34
ロストアップデートを防ぐような機能ってないですか?

667:デフォルトの名無しさん
07/09/25 22:32:58
Hibernate3になって、ストアドプロシージャをサポートしたらしいけど
参考サイトとかないですかね?


668:デフォルトの名無しさん
07/09/26 00:44:57
>>667
URLリンク(www.hibernate.org)

669:デフォルトの名無しさん
07/09/26 00:48:43
>>668
英語読めない

670:デフォルトの名無しさん
07/09/26 01:39:42
>>669
URLリンク(www.nova.ne.jp)

671:デフォルトの名無しさん
07/09/26 01:45:43
>>669
それは、読んでないだけ。

672:デフォルトの名無しさん
07/09/27 00:48:19
カイエンってどうよ?

673:デフォルトの名無しさん
07/09/28 00:59:53
最近、聞かんな。昔はHibernateと争える勢いだったっけ。

674:デフォルトの名無しさん
07/09/28 07:00:36
JPAに対応したよ

675:デフォルトの名無しさん
07/10/06 18:11:51
最近Ruby on Railsをすこしやってたんだけど、Railsに相当するものって
Javaで言うとどんなのがあります?

やりたいのは、Railsでやってた、↓をJavaでもやりたい。
Four Days on Rails 4日で作るToDoリスト
URLリンク(rails.to)

676:デフォルトの名無しさん
07/10/06 19:05:18
>>675
JRuby on Rails

677:デフォルトの名無しさん
07/10/07 00:30:39
>>675
厳密にはJavaじゃないけど、Grailsとか
URLリンク(grails.codehaus.org)

678:デフォルトの名無しさん
07/10/07 00:48:54
>>675
JSF+Rowsetならすべてポトペタであつかえるオールインワン環境だぞ

問題はRowsetが主流に慣れそうになくてJSF+JPAになりそうだけど

679:デフォルトの名無しさん
07/10/07 01:43:18
>>675
Chura

680:デフォルトの名無しさん
07/10/07 02:05:28
>675の人気にジェラ

681:デフォルトの名無しさん
07/10/07 02:32:45
詳しくないけど、676〜678 は違うだろ。>>679 だな。

682:デフォルトの名無しさん
07/10/07 06:00:35
>675
RIFE

683:デフォルトの名無しさん
07/10/07 08:50:59
>>676
JRubyインストールしてみる

>>677
Groovyインストールしてみる

>>678
ポトペタって、マウスでぐりぐりやるとあらできあがり?
わからん

>>679
>churaの基本構成は、Seasar2.4 + Teeda + KuinaDao + S2Hibernate-JPA + S2Dxo + ツール群という形になります
インストール大変そうだから様子見てみる

>>682
RIFEインストールしてみる(他と比べると、ちょっと情報量が少ない?

684:デフォルトの名無しさん
07/10/07 11:52:24
>>683
churaのインストールはこれだけだよ。
URLリンク(s2container.seasar.org)

俺も最初は面倒くさそうだと思ったんだけど、eclipseプラグイン入れれば揃うみたい。

685:デフォルトの名無しさん
07/10/07 23:49:40
なんというヘタレ…
URLリンク(d.hatena.ne.jp)

686:デフォルトの名無しさん
07/10/08 03:45:53
Railsの環境設定なんか、Netbeans6のRuby版いれればDBもWebサーバーも苦労ないのにな。

687:デフォルトの名無しさん
07/10/08 04:28:59
テーブルと1対1なエンティティクラスとマッピングする利点てなによ?

688:デフォルトの名無しさん
07/10/08 08:46:40
>>685
こんなやつ一生無職のほうが業界のためだ

689:デフォルトの名無しさん
07/10/08 11:59:00
こんなクズに対してレスしてたのか

690:デフォルトの名無しさん
07/10/08 14:31:25
>>685って>>675

691:デフォルトの名無しさん
07/10/08 14:56:55
一目瞭然だろ

692:デフォルトの名無しさん
07/10/08 17:40:10
結論
 標準になった以上、JPA以外の選択肢はありえない

693:デフォルトの名無しさん
07/10/08 19:32:17
Cayenneまで対応したことで、ORマッピングフレームワークが全部JPA対応になったから、どれを選んでもJPAには対応している、ってことか?
結論にはならんな。

694:デフォルトの名無しさん
07/10/08 20:35:11
Db上のフィールドがJavaのメンバ名として使用できない名称のような場合、
どうやってORmappingしているのですか?

695:デフォルトの名無しさん
07/10/08 20:41:11
>>694
完全に一致させる必要ないだろ

696:デフォルトの名無しさん
07/10/08 20:48:05
>>694
好きな名前つければいいと思うよ。

697:デフォルトの名無しさん
07/10/08 20:48:34
>>694
プロパティとDBのフィールド名は一致させる必要はないぞ

698:デフォルトの名無しさん
07/10/08 21:35:58
>>695-697
POJO内のメンバはDB上はこのフィールド、
のようなことはマッピングファイル?か何かに書いておけば
Dbアクセスの時は意識せずに使える、
ORマッピングのツールはどれもそんなモンなんですか?

逆に、それはできないぞ、というモノもあるのでしょうか。

699:デフォルトの名無しさん
07/10/09 01:09:02
>>698
EJB3.0だとこんな感じになるはず。

# ただ、なるべく一致させておいた方が不幸なことが起きないかも・・・

@Entity(name="ITEM")
public class Item implements Serializable{
private int id = 0;

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="RENBAN",nullable=false)
public int getId(){ return id;}

public void setId(int id){ this.id=id;}

private String title = null;

@Column(name="SHOSEKI_MEI",nullable=false)
public String getTitle(){ return title;}

public void setTitle(String title){ this.title=title;}

700:694
07/10/09 01:21:50
試しにCayenneでやってみますた。
作成されたBeanを見ると、
public static final String フィールド名_PROPERTY = "メンバ名";
という定数があって、これを使うようですね。
外部ファイルかアノテーションでやるのかと思ってましたが、
他のフレームワークでもこんなカンジなんでしょうか。

>>699
なるべく一致させたいのはやまやまですが、
ERを変えられるような立場ではないのです。orz

EJB3.0だとアノテーションで指定するのですね。
参考になります、ありがとうございますた。

701:デフォルトの名無しさん
07/10/09 13:04:01
JPAはEJB3から独立してSEで使えるから便利だよ
NetBeansだとテーブルから全部自動で作られるし

702:デフォルトの名無しさん
07/10/09 20:24:11
>>701
NetBeans以外では自動で作ってくれるツールをしらない?

703:デフォルトの名無しさん
07/10/09 21:34:41
プラグインを用意することなくデフォで使えるってのが大きいだけだろ

704:デフォルトの名無しさん
07/10/10 01:27:45
>>702
知ってる

705:デフォルトの名無しさん
07/10/10 01:31:27
>>701
きしだタソ乙

706:デフォルトの名無しさん
07/10/12 06:45:53
>>702
WTP2.0

707:デフォルトの名無しさん
07/10/12 22:52:01
結論:DAOでOK マッピングイラネ

708:デフォルトの名無しさん
07/10/12 23:05:37
DAOでOKって、マッピング使っても使わなくてもDAO使うだろ。

709:デフォルトの名無しさん
07/10/13 03:12:15
>>707
ありえないほどバカだな

710:デフォルトの名無しさん
07/10/13 08:51:12
DAO内で自分でSQL発行じゃね?

711:デフォルトの名無しさん
07/10/13 10:59:52
>>710
その場合でも、手動マッピングはするわけだが

712:デフォルトの名無しさん
07/10/13 11:32:35
わかった!>>707はマッピングせずに

M a p を そ の ま ま 使 う ん だ よ !

713:デフォルトの名無しさん
07/10/13 13:24:55
ものによってはMapそのままでも悪くないと思うけどな
キー値の取得がプロパティの取得につながるし

ただ、HashMapとかそのままつかうのだけは禁止
キー値が存在しない場合Exceptionをかえすような実装ならOK

714:デフォルトの名無しさん
07/10/13 17:00:59
まーた、Map厨発生か。
が、キー値なしで例外は納得した。

715:デフォルトの名無しさん
07/10/15 15:09:20
実は Microfost Data Access Objects のことなのかも知れん。

716:デフォルトの名無しさん
07/10/16 12:47:53
ResultSetだってRowSetだってmapベースだろ
DelphiだってBCBだってスクリプト系だって

717:デフォルトの名無しさん
07/10/16 14:05:52
こいつは何をいっているんだ?

718:デフォルトの名無しさん
07/10/16 14:19:27
はじめから道具ありきで、どっかで道に迷っちゃうんだろ
若い奴らは大変なんだよきっと

719:デフォルトの名無しさん
07/10/16 14:28:44
Map系ってのはMapインターフェースを実装したものではなくて
名前で値を引っ張るものってことだろ。
何もおかしいことはない。

720:デフォルトの名無しさん
07/10/16 14:42:06
どうしてわざわざオブジェクトに情報を詰めなおすのか
知っているか?

721:デフォルトの名無しさん
07/10/16 14:42:10
以前、このスレだか過去スレだかに、Map、Mapと騒ぐ奴がいたのな。
その流れを汲んでの話なんだよ。

自分で間違ったことを言っていないつもりなのだろうけど、
このずっと前からのスレの流れ的には空気読めてないんだよ。
しばらくROMってろ。

722:デフォルトの名無しさん
07/10/16 14:52:41
>>720
JavaがLightWeightじゃないから

723:デフォルトの名無しさん
07/10/16 17:47:29
>>721
それは知っているが、そんな昔の狂ったやつなんてもう今はいないだろう

Mapのように名前を使ってアクセスする場合何が問題だったのかだけがわかって使っていればおけ

VCLのようにラッパクラスをそのまま入れないこと、存在しないキーに対して
取得しようとしたときに例外を発生させることがきまっていれば問題はない

724:デフォルトの名無しさん
07/10/16 17:52:59
>>719
おまえの頭がおかしいということはわかった。

725:デフォルトの名無しさん
07/10/16 18:07:58
"存在しないキーに対して取得しようとしたときに例外を発生させる"
これが必要なのはなんで?
と思ったが、nullが戻ってきたんじゃデータが無いのか項目自体がないのかが判別できないのか
それ以外の理由もある?

726:デフォルトの名無しさん
07/10/16 18:48:26
そもそもDBにnull入れないほうがよくない?

727:デフォルトの名無しさん
07/10/16 21:53:40
そうか?

728:デフォルトの名無しさん
07/10/16 22:33:48
NULLが無いほうが楽ではあるかもな色々と
ただ、Oracleのような、空文字列がNULLであるようなDBMSではNULLを
避けようが無いだろう

729:デフォルトの名無しさん
07/10/16 22:41:00
NullはDBに必要だろ

730:デフォルトの名無しさん
07/10/16 22:42:28
(商用で)一番普及してしまっているOracleの仕様にはモニョるものがある罠・・・。

ただnullはアレで便利な面もあるので、ここらは宗教論だろう。

731:デフォルトの名無しさん
07/10/17 01:04:31
DBにNULLが全くいらないってのが
どんな状況かわからん。

732:デフォルトの名無しさん
07/10/17 02:44:06
Mapを使う時点で、静的型言語の利点を失っている気がする。
だったら、RoRのActiveRecordのほうがよっぽど使いやすい。

733:デフォルトの名無しさん
07/10/17 09:26:04
HOGE <> 1 な条件で、HOGE が NULL なレコードが取得できないのが
直感的じゃないと思うので、検索列には NULL は勘弁して欲しいところだ。

734:デフォルトの名無しさん
07/10/17 11:59:11
>>733
nullがほしいならnullもor条件いれればいいじゃない

直感的ではないというのは同意だが、SQLにとってnullは特別な値だから仕方がないか

735:デフォルトの名無しさん
07/10/17 12:11:08
検索の際の特別扱いだけでなく、
NULLありのカラムはインデクス張る際にも実装上の制約があったりするし、
単純にホスト言語のデータ型とマッピングする際にもやや面倒が生じるので、
少なくとも意味のあるデフォルト値が考えられるようなエンティティなら、
NULLの代わりにデフォ値突っ込んだほうが楽は楽な気がする。

ま、常にそうできるというわけでもないが。

736:デフォルトの名無しさん
07/10/17 12:23:44
むしろプログラム言語で3値論理をきれいに扱えないのがおかしい

737:デフォルトの名無しさん
07/10/17 13:08:35
C#のnullは3値論理だ

738:デフォルトの名無しさん
07/10/17 13:09:54
Javaなら3値普通に扱えるだろ・・・

739:デフォルトの名無しさん
07/10/17 15:11:51
C.J.Dateたんは第五正規形まで正規化すればnullなんていらんだろ派だね。


740:デフォルトの名無しさん
07/10/18 11:31:41
>>733
条件を () で括って最後に is true

741:デフォルトの名無しさん
07/10/21 11:43:49
Daoは1テーブルごとに1クラス作成して、CRUDのメソッドがあるのが普通なのでしょうか。
1:nのテーブルがあって、一覧を表示する詳細な検索画面などでどうしても結合が必要な場合や条件が複雑になる場合は
その画面専用?のメソッドを作成するものなのでしょうか。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4499日前に更新/245 KB
担当:undef