Java⇔RDBのMapping-Frameworkを語るThre Vol.3
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNG「Java⇔RDBのMapping-Frameworkを語るスレ Vol.2」
http://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]
ttp://www.martinfowler.com/eaaCatalog/
詳細は、>>2以降に。
0002デフォルトの名無しさん
NGNG[HYBERNATE]
ttp://www.hibernate.org/
[Cayenne]
ttp://objectstyle.org/cayenne/
[Torque]
ttp://db.apache.org/torque/
[CasterJDO]
ttp://www.castor.org/jdo.html
[ObJectRelationalBridge (OJB)]
ttp://www.terra-intl.com/jakarta/ojb/
[iBATIS - SQL Maps]
ttp://www.ibatis.com/common/sqlmaps2.html
[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/
0003デフォルトの名無しさん
NGNG[Jakarta Commons DBCP]
ttp://jakarta.apache.org/commons/dbcp/
[c3p0 : JDBC DataSources/Resource Pools]
ttp://sourceforge.net/projects/c3p0
[XAPool : Pool object for JDBC connections and XA connections]
ttp://xapool.experlog.com/
●JDBCに関する情報源
[JDBCの基礎]
ttp://www5b.biglobe.ne.jp/~hrk117/personal/pc/jdbc/
[JDBC API解説]
ttp://akimoto-jp.com/java/Database/Jdbc-api/index.html
0004デフォルトの名無しさん
NGNG--- 比較資料など ----
[JDBC, Hibernate, Torque, DbUtilのベンチマーク比較]
ttp://d.hatena.ne.jp/masanobuimai/20031216#p2
---- Hibernate関連情報 ----
[HIBERNATE - Relational Persistence for Idiomatic Java 【日本語訳版]
ttp://www.ozacc.com/library/java/hibernate/doc/html/index.html
[Hibernate User FAQ 日本語訳版]
ttp://nekop.programmers.jp/wiki/Hibernate/?HibernateUsersFAQ
[@IT - Hibernateで理解するO/Rマッピング1,2]
ttp://www.atmarkit.co.jp/fjava/rensai3/ormap01/ormap01.html
ttp://www.atmarkit.co.jp/fjava/rensai3/ormap02/ormap02.html
[JAVA開発メモ - Hibernate]
ttp://www.moriwaki.net/wiki/index.php?%5B%5BHibernate%5D%5D
[はてなダイアリー - R2D2氏の日記]
ttp://d.hatena.ne.jp/R2D2/searchdiary?word=%2a%5bHibernate%5d
[はてなダイアリー - koichik氏のひとりごと - Hibernate入門記]
ttp://d.hatena.ne.jp/koichik/searchdiary?word=%2a%5bHibernate%5d
[Hibernateメモ]
ttp://muimi.com/j/hibernate/
[Hibernateを試してみる]
ttp://docs.positrail.org/pukiwiki.php?Document%2FHibernate
0005デフォルトの名無しさん
NGNG[Hibernateのマッピング情報を生成するのに便利なツール]
- XDoclet
Java Beanからマッピングファイルを生成
ttp://xdoclet.sourceforge.net/xdoclet/index.html
- Hibernate Synchronizer
Eclipse用プラグイン。DBのテーブル構造からマッピングファイルを生成
ttp://www.binamics.com/hibernatesync/
- JFaceDbc
Eclipse用プラグイン。DBのテーブル構造からマッピングファイルを生成。
ttp://www.pratocity.com/index.jsp?mod=/jface/jfacedbc.jsp
(新バージョンから有償になった?)
- Exadel ORM Studio Hibernate Edition
Hibernateにも使える、統合ORM操作環境(有償)
ttp://www.exadel.com/products_ORMstudio.htm
- Hibernateと親和性のある、国産IoCコンテナ"Seasar"
ttp://www.seasar.org/
ttp://seasarproject.g.hatena.ne.jp/
ttp://itpro.nikkeibp.co.jp/free/JAV/J2EE/20040412/1/
---- Cayenne関連情報 ----
[Cayenneの紹介と、基本的な使い方(英語)]
ttp://www.theserverside.com/articles/article.tss?l=Cayenne
0006デフォルトの名無しさん
NGNG---- Torque関連情報 ----
[Torqueを動かしてみる]
ttp://homepage1.nifty.com/kingyoshi/computer/jakarta/torque.htm
[Torqueチュートリアル]
ttp://www.jajakarta.org/turbine/jp/turbine/torque/tutorial.html
---- JDO関連情報 ----
[Castorを使用したオブジェクト・リレーショナル・データ・バインディングの基本を学ぶ]
ttp://www-6.ibm.com/jp/developerworks/java/021025/j_j-castor.html
[CastorでオブジェクトをRDBにマッピング]
ttp://www.atmarkit.co.jp/fxml/rensai2/xmltool06/01.html
---- DbUtils関連情報 ----
[DbUtilsメモ]
ttp://www02.so-net.ne.jp/~kikuta/dbu/index.html
---- コネクションプーリング関連情報 ----
[Jakarta Commons DBCPを使ってみよう]
ttp://taka-2.com/jclass/DBCP/
[DBCP利用法 from "『カモン!Commons!』 Jakarta Commonsを使ってスキルアップ" (2002/09)]
ttp://www.mobster.jp/wiki/index.jsp?pid=Commons#i10
0007デフォルトの名無しさん
NGNG名前が激しく気に入った
0008デフォルトの名無しさん
NGNGEclipseで
DbEditプラグイン、JFaceDbcプラグイン、QuantumDBプラグイン、
MNPZ Eclipse SQL Environmentプラグイン、
EasySQLプラグイン、SQLDeveloperプラグイン、JDOプラグイン、
Eclipse Plugin for OJBプラグイン、Hibernatorプラグイン、devtoolプラグイン、
Cray Database Modeling Plug-in, Attrezzo per Xindiceプラグイン、
DB Copyプラグイン
を使ったことあるか?
0009デフォルトの名無しさん
NGNG0010デフォルトの名無しさん
NGNGまず、おまいの感想を聞かせれ。
0011デフォルトの名無しさん
NGNGダグラス・カイエンを連想するかポルシェを連想するかで駄目さ加減がわかるなOTL
0012デフォルトの名無しさん
NGNG実はDbEditしか使ったことがない。
がDbEditはグーなり
0013デフォルトの名無しさん
NGNGガキはFF6と言う
0014デフォルトの名無しさん
NGNG━━ n. カイエンヌ ((フランス領Guianaの港市で主都)).
cay・enne
━━ n. トウガラシ (cayenne pepper).
0015デフォルトの名無しさん
NGNG0016デフォルトの名無しさん
NGNGまぁFF6の主人公達はかなりFSSから名前を持ってきてるわけだが。
ティナのファミリーネームとかな。
0017デフォルトの名無しさん
NGNGそれを踏まえてのレスなんだが
0018デフォルトの名無しさん
NGNG0019デフォルトの名無しさん
NGNG0020デフォルトの名無しさん
NGNG●O/R-Mapping Framework各種
*NEW* [PriDE]
ttp://pride.sourceforge.net/
*NEW* [Tornado Object-Relational Mapping Engine]
ttp://tornado-db.sourceforge.net/
*NEW* [CocoBase Enterprise O/R (商用製品)]
ttp://www.thoughtinc.com/cber_index.html
*NEW* [JDX (商用製品)]
ttp://www.softwaretree.com/index1.htm
●参考サイトや情報源
*NEW* [Wake a hibernate up,in hurry !(スレ住人による日本語資料)]
2スレ目47氏提供
ttp://hirohiro.homeip.net/essay/2004/06/20040623.htm
*NEW* - Hibernate+XDocletの解説とサンプルコード
ttp://www.commentout.com/people/takai/memos/hibernate_xdoclet/
*NEW* - Hibernate + Middlegen + Antを使用したbuild.xmlの例
ttp://www.boundless-ocean.ne.jp/archives/000102.php
*NEW* - MiddlegenのAntタスクの仕様(英語)
ttp://boss.bekk.no/boss/middlegen/ant/index.html
*NEW* - EJB 3.0 Early Draft Review Released
EJB3.0では、Hibernateの思想が取り入れられます
ttp://www.theserverside.com/news/thread.tss?thread_id=27005
0021デフォルトの名無しさん
NGNG*NEW* [CayenneでORマッピング(スレ住人による日本語資料)]
ttp://www.fk.urban.ne.jp/home/kishida/kouza/cayenne.html
2スレ目598氏提供。
*NEW* [Aggregate Functions / MIN,MAX,COUNTなどの集約関数の使い方]
ttp://objectstyle.org/cayenne/examples/aggregate-functions/index.html
*NEW* ---- JDBC⇔RDB間モニタリングツール ---
O/Rマッパー使ってると、JDBCドライバとRDB間で、どのようなやりとりが
されてるのか知りたいときがある。そのためのツール。
[jdbcdebugger]
ttp://jdbcdebugger.sourceforge.jp/
[P6Spy]
ttp://www.p6spy.com/
*NEW* ---- その他、有益な情報源 ----
[ダイコン時代のORM - 結果セット中心]
ttp://d.hatena.ne.jp/higayasuo/20040708#1089245059
[ダイコン時代の設計手法 - モデリング]
ttp://d.hatena.ne.jp/higayasuo/20040609#1086738237
[EJB3.0の概要が明らかに──「アンチEJB」派の意見を取り込み大幅変更]
ttp://itpro.nikkeibp.co.jp/free/JAV/NEWS/20040510/1/
0022デフォルトの名無しさん
NGNG●Microsoft .NET用
[NHibernate]
ttp://nhibernate.sourceforge.net/
[ORM.NET(商用)]
ttp://www.olero.com/OrmWeb/index.aspx?p=ORM.ascx
●Perl用
[Object-Interface-1.0]
ttp://search.cpan.org/~gwelch/Object-Interface-1.0/
[SQL-Generator-0.02]
ttp://search.cpan.org/~muenalan/SQL-Generator-0.02/
●Ruby用
[rorm - Ruby Object-Rdbms Mapper]
ttp://www.commentout.com/people/takai/src/rorm/
[TapKit]
ttp://www.spice-of-life.net/tapkit/index_ja.html
[SDS]
ttp://www.starware.one.pl/software/sds/index.html
0023デフォルトの名無しさん
NGNGjFaceDbcは、2.xを使ってた。
用途は、Hibernateの基本マッピングファイル作成。
スケルトンとなるマッピングファイルが1テーブルづつ作れたが、
複数テーブルの一括作成機能ってのは無かった。
3.0以降は試してない。
あと、Hibernate Syncronizerとかいうのも使った。
これもマッピングファイル生成。こっちは一括作成できた。
0024デフォルトの名無しさん
NGNGほんとだ、Tapestryと併用するってか?
しかもインストールも以外と簡単なんだな。
0025デフォルトの名無しさん
NGNG0026デフォルトの名無しさん
NGNGFSSを調べてみたら、FF6と同じような餓鬼の扱いじゃねえかw
約20年も前のものにやたらと詳しいな藻前ら
やはりこれだな。
http://content4.eu.porsche.com/prod/cayenne/cayenne.nsf/jpnjapanese/cayenne
0027デフォルトの名無しさん
NGNGやっぱりこれだな。
http://www.hapima.com/prd/02000189/02000189owh0701/
0028デフォルトの名無しさん
NGNGプロダクトレビュー
話題のO/Rマッピングツール「Cayenne」を使う
http://www.atmarkit.co.jp/fjava/products/cayenne/cayenne_1.html
0029デフォルトの名無しさん
NGNGPObjGen (Eclipse plug-in)
http://eclipsewiki.net/eclipse/index.php?PObjGen
PObjGen はデータベースアクセス用のコードを生成する Eclpse 3.0 用プラグインです。
ウイザードからアクセスしたいテーブルとそのカラムを選ぶと、
そのテーブルのレコードを SELECT, INSERT, UPDATE, DELETE できる
Javaコードが生成されます。 現在 DB2 v8.1 対応のものの評価版を公開しております。
0030デフォルトの名無しさん
NGNG結局使わない・・・。
ORマッピングじゃないね。
強いて言うならRelation - Interfaceマッピングか。
0031デフォルトの名無しさん
NGNG0032デフォルトの名無しさん
NGNGやはり、「共通の敵」がいるのが一番もりあがるね。
0033デフォルトの名無しさん
NGNG地球を征服してやる。
0034デフォルトの名無しさん
NGNG0035デフォルトの名無しさん
NGNG違うよ、MapでDBアクセスを征服だよ。
0036デフォルトの名無しさん
NGNG0037デフォルトの名無しさん
NGNGラクロスらくろす。
0038デフォルトの名無しさん
NGNG0039デフォルトの名無しさん
NGNG地球から制服をなくしてやる。
0040デフォルトの名無しさん
NGNGうおー、それはだめだ。
断固反対。
0041デフォルトの名無しさん
NGNG断固阻止!お前はこのスレの北朝鮮に認定!
おれはブッシュやるね。
爆撃するぞ〜爆撃するぞ〜徹底的に爆撃するぞ〜
0042デフォルトの名無しさん
NGNG0043デフォルトの名無しさん
NGNG0044デフォルトの名無しさん
NGNG004544
NGNGそんな無駄なもの使わずMap使っとけ。
Map。
セッターゲッターしかないクラスもムダ。
Mapがいいですよ。
だから制服はなくさないでください。
ついでに看護士っていうのもやめて看護婦にしてください。
客室乗務員じゃなくて、スチュワーデスにしてください。
0046デフォルトの名無しさん
NGNGだからアンミラの制服はなくさないでください。
0047デフォルトの名無しさん
NGNG重量級だし融通きかないしイイコトないじゃん。
今後も今まで通り、Mapで決まりだよ。
これは理由とか条件とかそんなんじゃあない。
定めだよ定め。運命だ。宿命といってもいいかな。
もはや、Mapは宇宙の心理とも言えるかも。
Mapを別のMapに入れて、それを集めてまたMapを作る。
さらにそれを複数つかって新たなMapにツッコむ。
こうして、美しいフラクタル図形のようなMap構造ができあがっていく。
しかもそれは、ガウディのサグラダファミリアのごとく、
「永遠に完成しない、という完成」を持っているわけだ。
そんなこともわからねーやつは、永遠にITブルーワーカーやってろっての。
おまえもか、ではない。ブルワーカーじゃねーぞ。
通販じゃ売ってないから、導入には注意しろよ。
俺は徹夜で仕事したから、今から帰るぞ。あばよ。
0048デフォルトの名無しさん
NGNGhttp://sourceforge.net/project/shownotes.php?release_id=257981
minor bugfixes and improvementsだそうな
0049デフォルトの名無しさん
NGNGオブジェクトモデルとリレーショナルモデルのギャップ埋めるより、事務服のおねえさんがオレの心のスキマ埋めてくれた方が仕事がはかどるんだよ。
0050デフォルトの名無しさん
NGNG0051デフォルトの名無しさん
NGNG0052デフォルトの名無しさん
NGNG0053デフォルトの名無しさん
NGNG0054デフォルトの名無しさん
NGNG0055デファルトの名無しさん
NGNGHQLとかじゃなくて普通に。
複雑なクエリーのやりかたがわからないんですが。
0056デフォルトの名無しさん
NGNG0057デフォルトの名無しさん
NGNGSQL投げようがストアド起動しようがやりほうだい。
しかし、Hibernateのメリットを生かせない罠。
0058デファルトの名無しさん
NGNGありがとうございます。
session.connection().createStatement()...
なるほど、コネクションは取れるわけですか。
トランザクションとかは、Hibernateと一緒にできそうですね。
ちなみに、検索結果を、ResultSetじゃなくて、
Hibernateで作ったビーンに詰めて返したいんですけど、
そういうのはできないですか?
(DBUtilsな風な利用法か、設定ファイルにSQL書けて結果はビーンになってるとか。。。)
0059デファルトの名無しさん
NGNGhibernateでネイティブなSQLの記述
調べるとこんなの出ました。
http://www.hibernate.org/hib_docs/reference/en/html/querysql.html
-sesson.createSQLQuerry(...) - 本体は引数にベタ書き
-session.getNamedQuerry(...) - 本体はhbm(?)にsql-query要素に記述
そうでありましたか。。。
0060デフォルトの名無しさん
NGNGhttp://www.fk.urban.ne.jp/home/kishida/kouza/hibernate.html
でも、>>39の陰謀による次の問題に荷担してしまうなら、削除します。
http://www.google.com/search?q=%E3%83%8A%E3%83%BC%E3%82%B9%E3%82%AD%E3%83%A3%E3%83%83%E3%83%97+%E5%BB%83%E6%AD%A2
0061デフォルトの名無しさん
NGNGそこまでしてhibernate使う意味あるのか?
0062デフォルトの名無しさん
NGNGGJ!!
0063デフォルトの名無しさん
NGNGどもです。
MiddlegenでXDocletタグを生成しつつ、XDocletタグからhbmファイル生成するところも書き足しました。
0064メソドロジスト
NGNG所詮テーブルのストアだから
いずれオブジェクトグラフの保存に適したODBに取って代わるだろう
0065デフォルトの名無しさん
NGNG0066デフォルトの名無しさん
NGNGODB ってよくワカランのだが、インスタンス化の範囲ってどうやって決めるの?
給与明細に社員名だそうとして、社員オブジェクト持ってきたら、
家族構成とか住所とか配属履歴とか余計なインスタンスがくっついてきたり
しないんですか?
0067デフォルトの名無しさん
NGNGOODB - オブジェクト指向データベース
http://pc5.2ch.net/test/read.cgi/db/1057157392/l50
0068デフォルトの名無しさん
NGNGlazy evaluation
0069デフォルトの名無しさん
NGNGこりゃ失礼
>>68
面倒くさそう
0070デフォルトの名無しさん
NGNG0071デフォルトの名無しさん
NGNGHibernateとかCayenne使う感覚と同じだよ。
っていうか、HibernateとかCayenneとかが、ODB使う感覚でRDB使えるようにしてるんだけども。
で、この辺の技術のおかげで、ODBは出る幕がなくなった。
0072デフォルトの名無しさん
NGNGあまり聞かなくなったな。
企業ベースではレガシーな資産が残る限り、まだまだRDBの天下は続くだろうよ。
そこでMapの出番ですよ(w
0073デフォルトの名無しさん
NGNGそれは、最近の情報に疎いだけでは・・・
むしろ最近やっと実装をみかけるようになってきた。
0074デフォルトの名無しさん
NGNG>>73
そうそう、最近よく聞くようになってきたよ、XML-DB。
あれってDB再構成無しに属性追加とかサクっとできるところが
よさげだ。
マッピーお役ご免?
0075デフォルトの名無しさん
NGNGそういう単純な話ではないのかな?
0076デフォルトの名無しさん
NGNGRDBだと、あるデータだけ属性追加、とかは間違っても出来ない。
0077デフォルトの名無しさん
NGNGそういう場合は子表を作るのがRDBの流儀、でしょ
0078デフォルトの名無しさん
NGNGパフォーマンス的にどうなんだろう?
0079デフォルトの名無しさん
NGNG0080デフォルトの名無しさん
NGNGHibernate Synchronizer使ったら
ラージオブジェクトのカラムに対応するフィールドがStringになっちゃったんだけど。
DBはPostgreSQLです。
0081デフォルトの名無しさん
NGNG本当?それとも性能や運用の面でそうすることが多いということ?
0082デフォルトの名無しさん
NGNGどっちに対して本当って聞いてるんだ?
0083デフォルトの名無しさん
NGNG両方とも
0084デフォルトの名無しさん
NGNGま、少なくとも、仕組みとしてはあるデータだけに属性を追加というのはできない。
どうにかして実現するとしても、属性がデータによって変わることがあるものは、RDBではかなり表現しづらい。
なんとかデータを格納しても、検索やりづらいし。
0085デフォルトの名無しさん
NGNGnullってモンがあるわけだけどね。
0086デフォルトの名無しさん
NGNGってあるんですか?
0087デフォルトの名無しさん
NGNG0088デフォルトの名無しさん
NGNGnullがあるとしても、1万件のデータのうち、ひとつのデータにだけある属性のために9999件のデータにnullを入れるのはムダだし。
ほかのデータには別の属性が複数あったり、ある属性は複数のデータがもっていたりすると、ひとつの表で表現するのは非常にムダ。
alter tableしてinsertする、というオペレーションも避けたいし。
また、そのうちのある属性は配列になっていたり、複合属性になってたりすると、データの表現だけで大変な労力が必要になってくる。
データの整合性を保つというデータベースの役割は果たせなくなるし。
0089デフォルトの名無しさん
NGNGそのデータにはそもそもその属性がないのか、属性はあるけども値が割り当てられてないのか、判断できないね。
0090デフォルトの名無しさん
NGNGそこまで統一性が無い場合って、例えばどんなデータでしょうか。(イメージつかめてない)
(まぁ少なくともJava⇔RDBからは外れそうだけど。)
0091デフォルトの名無しさん
NGNG代表的なのはアンケート情報
0092デフォルトの名無しさん
NGNG0093デフォルトの名無しさん
NGNGアンケート情報は定型化しなきゃ駄目じゃん、と思ったけど、何種類も違うや
つを一緒に管理する場合と理解してOK?
0094デフォルトの名無しさん
NGNG1回のアンケートは定型化できても、次回は少しだけ項目がかわるということはよくある。
実際に聞きたい項目は定型化していても、あとの質問での答えを引き出すための質問は質問対象によって変わるということもありうるし。
0095デフォルトの名無しさん
NGNG顧客ID アンケートID アンケート質問 アンケート回答
みたいなテーブルつくっておけばいいだけじゃん。
項目増えてもオッケーでしょ。
009695
NGNGID・質問マスタは別に用意すべきだろう。
でも、RDBで十分対応できる範囲だな。
0097デフォルトの名無しさん
NGNG0098デフォルトの名無しさん
NGNG複数回答ありの項目があると、結構簡単に破綻するけどね。
0099デフォルトの名無しさん
NGNGまぁ、お前が一番バカだってこった。
0100デフォルトの名無しさん
NGNGそういう場合は単に枝番を振るなりすればいいんじゃないの?
顧客ID アンケートID 枝番 回答ID
これでオッケー
前の絡む3つが主キー候補
0101デフォルトの名無しさん
NGNG複数設問、複数回答、修正可能、履歴ありの項目があると、結構簡単に破綻するけどね。
0102デフォルトの名無しさん
NGNG複数設問って、どんなだ?
普通、アンケートって複数設問があるけど、そういう意味じゃないよね。
俺も後で考えたけど、選択入力の項目と自由入力の項目があって
自由入力はしばしば「その他」を選択入力として選んだ場合、
とかだったりするのが、汚くなりやすい要因なのかなあと思ったり
したですよ。
多分FKによる外部参照制約をつけにくくなったり、ほとんどの場合に
NULLであるようなVARCHAR(4000)のカラムが必要になったりとか。
0103デフォルトの名無しさん
NGNG0104デフォルトの名無しさん
NGNGじゃ、どんなテーブルでも ID と text 1個でハイ終了・・・
0105デフォルトの名無しさん
NGNG履歴をどう利用したいかにもよるだろうけど
履歴テーブルをドン、と作っておいて
トリガーでコピーとかもアリ
0106デフォルトの名無しさん
NGNGじゃあ、複数回答のある項目の中に複数項目が含まれるときは?
「お持ちのパソコンと、インストールしている主なソフトとそのメーカーを答えてください。」みたいな。
ありうる設問に対してすべて対応できるようなテーブル設計って、気が狂いそうになる。
0107デフォルトの名無しさん
NGNGそこにXML形式のデータ入れておけば終了。
0108デフォルトの名無しさん
NGNGで、そのXMLの中のひとつで検索したい場合にインデックスも
張れないと。
ってか、おまえら Mapping Framework を語れ。
0109デフォルトの名無しさん
NGNG0110デフォルトの名無しさん
NGNG>2 >4 >6
0111デフォルトの名無しさん
NGNG0112デフォルトの名無しさん
NGNGCHARと違って実際に4000バイトの領域が自動的に使われちゃう
という訳ではないからね。
0113デフォルトの名無しさん
NGNGムダかどうかはここでは別の話なんで措いておくとして、
そういうデータの表現がRDBだと難しくてXMLなら容易だと
考えるのはばかげている。
0114デフォルトの名無しさん
NGNGRDBではひとつの表では表現できなくて、XMLで非常に素直に表現できるのは事実だが。
0115デフォルトの名無しさん
NGNGRDBではそもそもそのふたつを区別しない。
XMLでもおなじことだけど。
0116デフォルトの名無しさん
NGNGXMLであれば、タグを書かなければ表現できる
0117デフォルトの名無しさん
NGNGなんで一つの表で表現しなきゃならんのだ?
#>>114にとって「2つ以上の表を扱うのは難しい」ということ?
0118デフォルトの名無しさん
NGNGひとつのデータの集まりを表すために2つ以上の表を扱うのは、かなりめんどくさいよ。
マッピング使えばある程度楽にはなるけど。
素直に表現できるのであれば、素直に表現できたほうがいい。
ま、表をごりごりつなげるのが苦ではないなら、RDB使ってればいい。
実際には、ほとんどのシステムで、RDBでの苦よりRDBでの楽が勝るから、RDBを選択することになるんだけど。
0119デフォルトの名無しさん
NGNG素直に表現することの価値がわからなければ、わからないだろうね。
0120デフォルトの名無しさん
NGNG0121デフォルトの名無しさん
NGNG君にはNDBがオススメだ!
0122デフォルトの名無しさん
NGNGCODASYL頭のSEがRDBを否定しているのを見てるみたいだな。
問題領域をRDBにマッピングするのはめんどくさくて、XMLに
マッピングするのは「素直」?
やっぱり単にRDBの使い方を知らんだけのようにおもうが...。
0123デフォルトの名無しさん
NGNG話の流れが読めん奴だな。
話題に出てるような、属性がデータごとに異なるものをRDBにマッピングするのはめんどくさくて、XMLにマッピングしたほうがより素直に表せるという話なのだが。
一般的に言えば、属性が動的に変わるデータはRDBで扱いづらい
0124デフォルトの名無しさん
NGNG> かなりめんどくさいよ
> ま、表をごりごりつなげるのが苦ではないなら、RDB使ってればいい。
DQN決定
在る意味Map以上に凄いかもね君。
0125デフォルトの名無しさん
NGNG0126デフォルトの名無しさん
NGNGいや、だからどの程度の「動的」を想定してんの?
アンケート程度では、正直RDB否定論の根拠としては薄いと思うよ
0127デフォルトの名無しさん
NGNG正規化されたデータを2つ以上のテーブルに分割する場合がめんどくさいんだよ。
アンケートの場合でも、属性を無限に増やしていけば、正規化されたままで表現はできるわけだから。
>>126
別に否定してるわけではないし、XMLの方がより素直に表現できるといってるだけ。
0128デフォルトの名無しさん
NGNG>正規化されたデータを2つ以上のテーブルに分割する
正規化されてねぇんだよ、それ
0129デフォルトの名無しさん
NGNG正規化してテーブルの数を増やすと、実装の手間が増えるのは事実。
それが許容できる範囲かそうでないかは別の話で。
0130デフォルトの名無しさん
NGNGデータ1には属性1があり、データ2には属性2があり、・・・データnには属性nがある場合、ひとつのテーブルに属性1〜nを持たせるのは正規化されていないわけではないだろ。
それをパフォーマンスの問題なんかでテーブル分割を分割すると、めんどくさいことになる。
0131デフォルトの名無しさん
NGNGそのテーブルに疑問持ってないの?本当に?
おかしいと思わないの?
0132デフォルトの名無しさん
NGNGもう少し具体的に話してみて。それだけだと、
データID 属性種別 属性値
という形の表にできそうに見えるから。
0133デフォルトの名無しさん
NGNGそれXMLスキーマとRDBのDMLで書いてみてよ。
本当にRDBの方が複雑って言えるか?
0134デフォルトの名無しさん
NGNG変化に対する適応力の話に見えるなあ。
RDBって表を変えるのが相当大変じゃない?
0135デフォルトの名無しさん
NGNGここまでかかってやっと本題だね。はっきりいってそこが一番の違いだと思うよ。
0136デフォルトの名無しさん
NGNG属性の追加、テーブルの追加で済む程度のものであればなんの
問題もないというのはガイシュツ。
もしデータモデルに大幅な変更があった場合、XMLなら変更が
簡単、なんてことはない。
0137デフォルトの名無しさん
NGNG属性の型が違ったら?
0138デフォルトの名無しさん
NGNGすべてtext型で解決。
0139デフォルトの名無しさん
NGNGまぜっかえすなバカヤロウw
0140デフォルトの名無しさん
NGNGその場合でも、XMLでできてRDBにできない変更というと、数値型の
属性を文字型にするとかくらいかな?
そんな変更するくらいなら、俺なら素直に属性追加するが。
0141デフォルトの名無しさん
NGNG0142デフォルトの名無しさん
NGNGこんな表でXMLの真似事ができそうだな。
ID NAME TYPE CHAR_VAL INT_VAL DATE_VAL...
とかでバリアントの真似事....はさすがに嫌だな。
0143デフォルトの名無しさん
NGNGやっと本題って、データのモデルが違うから、RDBで表しやすいデータや、RDBで表しにくいけどXMLでは表しやすいデータがある、というのが本質なんだけど。
それをなんか、例えばであげたものの揚げ足をとって、RDBでも十分とか、話の本質を理解せずにツッコミいれてる奴がいて混乱させてるだけ。
結局、モデルのギャップを埋めることの大切さを理解してないという点では、ROマッピングの意味をわからずMAPでも同じことができるからROマッピングは必要ないといってたのと同じ。
0144デフォルトの名無しさん
NGNG0145デフォルトの名無しさん
NGNGそこんところをもちっと本質的に説明できる例を挙げてくれりゃ
他も納得するんだろうけど。簡単に揚げ足とられるような「例えばで
あげたもの」じゃなくてさ。
RDBで表現するよりXMLで表現するのに適したデータというのは
確かに存在する。たとえば既にXMLで表現されたデータそのものとか。
でもじゃなにも言っていないのとおなじこと。
一方で、RDBのテーブルに一対一で対応する形のデータ以外は
すべてリレーショナルモデルへの落とし込みが必要なわけで、その
意味では「めんどくさい」のも確か。
でもそれはRDB遣いにとっては常態であって、ことさら困難を言い
立てるものでもない。また、適切なモデルに落とし込む手間が必要と
いう意味ではXMLも同様。
そこまでの前提を置いた上で、XMLモデルで表現するのは容易だが
リレーショナルモデルで表現するのが困難なケースにどんなものが
あるかというところが問題なわけ。
要は上で挙げられた、RDBでは「間違ってもできない」「かなり表現
しづらい」「データの表現だけで大変な労力が必要」ってところの
揚げ足を取られない例を挙げて欲しいわけなんだが。
0146デフォルトの名無しさん
NGNGそれより、変化への対応の話をしたいんだが。
昔みたいに1年かけて作って7年そのまま稼動、みたいなことは
少なくなってきてるんだし。
0147デフォルトの名無しさん
NGNGそういう話がしたいってんなら自分でしろよ。
まず>>136に対してなにか言いたいことはないのか?
0148デフォルトの名無しさん
NGNGと言ってるだけ。
RDB経験豊かな人に尋ねたいのは、対応しづらい仕様変更はあったか、
それをどのように対応したか、という経験談。
ただ、>>145みたいな
>でもそれはRDB遣いにとっては常態であって、ことさら困難を言い
>立てるものでもない。
みたいな寒い発言は勘弁していただきたい。
0149デフォルトの名無しさん
NGNG0150デフォルトの名無しさん
NGNG>すぐに「適しているかどうか」の話に引き戻そうとするのがウザイ
オレはXML-DBの使いどころの話をしてるから、それは当然だ。
>RDB経験豊かな人に尋ねたいのは、対応しづらい仕様変更はあったか、
>それをどのように対応したか、という経験談。
>>134の話を続けたいのかと思ったがどうも違うようだな。
他の香具師が乗ってくるよう手前で話を振らなきゃ、望み通りの
議論にならんのはアタリマエだろう。ワガママ言うなよ。
0151デフォルトの名無しさん
NGNGXML-DBの話はこちらへ。
データベース板 XML統合スレッド
http://pc5.2ch.net/test/read.cgi/db/1057207891/l50
情報システム板 XML-DBの今後!?
http://science3.2ch.net/test/read.cgi/infosys/1051815370/l50
0152デフォルトの名無しさん
NGNGテーブルA jdbc/hoge1ds
テーブルB jdbc/hoge2ds
0153デフォルトの名無しさん
NGNG子が親へのポインタ持ってるだけだと、上から降りて検索するのが
SQLの繰り返し発行になってしまって非常に遅くて困るんですが。
0154デフォルトの名無しさん
NGNGその ツリーID もってるレコード全部取り出したら
0155デフォルトの名無しさん
NGNG全部というわけではなくて、特定ノード以下だけ選択したかったり…
ID工夫するしかないかな?あるいは、親ノードIDと子ノードIDの対応表
だけ別に作るか…アタマイテ。
0156デフォルトの名無しさん
NGNG汚い手ですが、ツリー上のノードを示す「パス」をカラムとして
持てばいいのでは。
正規化とは反対の方向になりますがね。
0157デフォルトの名無しさん
NGNG複数のセッション使えばいいんじゃない?
0158デフォルトの名無しさん
NGNG* Exadel JDO (Riflexo) http://www.exadel.com
* FastObject (Versant) http://www.fastobjects.com
* FrontierSuite (ObjectFrontier) http://www.objectfrontier.com
* IntelliBO (Signsoft) http://www.intellibo.com
* JDO Toolkit (MVCSoft) http://www.mvcsoft.com
* JDOGenie (Versant) http://www.jdogenie.com
* JPOX http://www.jpox.org
* JRelay (Object Industries) http://www.objectindustries.com
* Kodo JDO (SolarMetric) http://www.solarmetric.com
* Lido (LIBeLIS) http://www.libelis.com
* ObjectDB (ObjectDB Software) http://www.objectdb.com
* ObjectStore (Progress Software) http://www.objectstore.net
* OJB (Apache) http://db.apache.org/ojb/
* Orient (Orient Technology) http://www.orientechnologies.com/
* PowerMap JDO (SCE) http://www.powermapjdo.com
* Speedo (ObjectWeb) http://speedo.objectweb.org
* TJDO http://tjdo.sourceforge.net
* XORM http://xorm.sourceforge.net
0159デフォルトの名無しさん
NGNGJDO も廃れたね〜。
0160デフォルトの名無しさん
NGNGORマッピングにこだわりすぎてROマッピングがやりにくかったとか?
0161デフォルトの名無しさん
NGNG「再帰SQL」でぐぐれ
今ならたいていのRDBMSで使えるだろ
0162デフォルトの名無しさん
NGNG実装してるのはDB2だけだと思ってたけど、他にもあったっけ?
0163デフォルトの名無しさん
NGNGpackage package1.auto;
import java.util.List;
/** Class _Actor was generated by Cayenne.
* It is probably a good idea to avoid changing this class manually,
* since it may be overwritten next time code is regenerated.
* If you need to make any customizations, please use subclass.
*/
public class _Actor extends org.objectstyle.cayenne.CayenneDataObject {
public static final String BIRTHDAY_PROPERTY = "birthday";
public static final String HOMETOWN_PROPERTY = "hometown";
public static final String NAME_PROPERTY = "name";
public static final String SEX_PROPERTY = "sex";
public static final String MOVIE_ARRAY_PROPERTY = "MovieArray";
public static final String ID_PK_COLUMN = "id";
public void setBirthday(java.util.Date birthday) {
writeProperty("birthday", birthday);
}
public java.util.Date getBirthday() {
return (java.util.Date)readProperty("birthday");
}
0164デフォルトの名無しさん
NGNGwriteProperty("hometown", hometown);
}
public String getHometown() {
return (String)readProperty("hometown");
}
public void setName(String name) {
writeProperty("name", name);
}
public String getName() {
return (String)readProperty("name");
}
public void setSex(String sex) {
writeProperty("sex", sex);
}
public String getSex() {
return (String)readProperty("sex");
}
0165デフォルトの名無しさん
NGNGpublic void addToMovieArray(package1.Movie obj) {
addToManyTarget("MovieArray", obj, true);
}
public void removeFromMovieArray(package1.Movie obj) {
removeToManyTarget("MovieArray", obj, true);
}
public List getMovieArray() {
return (List)readProperty("MovieArray");
}
}
0166デフォルトの名無しさん
NGNG感想:
java.util.Listはimport文を生成しているのに
java.util.Dateと直接書いてるのが納得いかない。
同様に、package1.Mode objという書き方も納得いかない。
同じパッケージ内ならそんなもんいらんちゅーに。
_PROPERTYという名前の定数はどうにかならないのだろうか?
BIRTHDAY_PROPERTY という変数を使っているにもかかわらず"birthday"
という文字列を直に使うとはどういうことか?
0167デフォルトの名無しさん
NGNGjava.sql.Date対策だろ
0168デフォルトの名無しさん
NGNGOracleでは階層問い合わせだな。
SQL ServerではYukonから使える模様。
0169デフォルトの名無しさん
NGNGGeneration Gapパターンが使われているんだし
java.sql.Date使われていないんだったらimport宣言してもええじゃん
と激しく思うんだが。
0170デフォルトの名無しさん
NGNGなんかの拍子にimport java.sql.*ってやったらエラーになるからじゃないの?
0171デフォルトの名無しさん
NGNG0172デフォルトの名無しさん
NGNGいまどきimportに*を使う香具師はDQN
0173デフォルトの名無しさん
NGNG0174デフォルトの名無しさん
NGNG漏れモナー
0175デフォルトの名無しさん
NGNGhttp://d.hatena.ne.jp/kagamih/20040822#p4
@IT Hibernateで理解するO/Rマッピング:簡単なプログラムでO/Rマッピングを体験
http://www.atmarkit.co.jp/fjava/rensai3/ormap04/ormap04_1.html
0176デフォルトの名無しさん
NGNG0177デフォルトの名無しさん
NGNGアプリケーションサーバーのDataSource使ってる?
HibernateからDBCP or c3p0?
MySql3.xだと、c3p0でごみセッションがのこりやがる。
DataSource使いたいけど、うまくいかね。
この辺のドキュメントってどこかに纏まってないかな。
0178デフォルトの名無しさん
NGNGSeaserDAOってどうなん?
0179デフォルトの名無しさん
NGNG> WEB+DBの最新号読んだが。
> SeaserDAOってどうなん?
君の感想は?
0180デフォルトの名無しさん
NGNGサクーシャの日記。この URL 6月ころから部分からだけど
このへんから読み進めると S2Dao の概念がよく分かる。
[はてなダイアリー - ひがやすをのここだけの話]
http://d.hatena.ne.jp/higayasuo/searchdiary?of=30&word=S2Dao
公式ドキュメント
[Seasar - DI Container with AOP -]
http://homepage3.nifty.com/seasar/s2dao.html
スレ
[国産オープンソースDIコンテナSeasar V2(S2)]
http://pc5.2ch.net/test/read.cgi/tech/1092044210/
俺的にはかなりいいとおも。DAOインタフェースだけ書けば実行できるのは
かなりうれしい。Hibernate や DBUtils のいいとこどり。
ただ、今はまだサクーシャにとっての完成系でないような気がするので
将来的に期待大。
0181デフォルトの名無しさん
NGNGそういう君の感想は?
サンプルプログラムにコメントが全然ないのが笑った。
Seasarの人たちって「美しいソース書けばコメントなんか不要」というポリシーなんだろうか。
0182デフォルトの名無しさん
NGNGあんなシンプルなソースにコメントいるか?
まー、人それぞれだけどな。
0183デフォルトの名無しさん
NGNG0184デフォルトの名無しさん
NGNG>>183
認定厨乙
0185178
NGNGあ、ごめん。レス遅くなりました。
俺の感想としては、既存のSQLとの併用の割合がよさそう、て感じかなぁ。
後は、Hibernateみたいな自動生成ツールがどのくらい整ってるか、気になった。
>180
あんがと、これからスレとか見させてもらうわー。
0186デフォルトの名無しさん
NGNGテーブル結合するときは↓みたいにオブジェクトの配列で返すのが普通なの?
http://d.hatena.ne.jp/koichik/20040615#1087314385
自分でも組んでみたんだけど、
User、Statusのテーブルがあって
UserのフィールドにStatusを持たせてmany-to-oneに設定。
List userList = dao.find("from User u inner join u.Status Where u.Username='hoge'");
とした時にListの0番目の要素にオブジェクトの[User,Status]のオブジェクト配列が入ってる。
(UserオブジェクトのフィールドのStatusにも値入る。)
なんか使いづらそうな気がするんだけどこの使い方であってる?
普通はこんなことしない?
0187デフォルトの名無しさん
NGNGdao.findは↓synchronizerで生成した奴そのままだけど。
public java.util.List find(String query, Session s) throws HibernateException {
return s.find(query);
}
sはnet.sf.hibernate.Sessionのインスタンスです。
0188デフォルトの名無しさん
NGNGクリテリアでとってくりゃいいんじゃない?
0189デフォルトの名無しさん
NGNG0190デフォルトの名無しさん
NGNG0191デフォルトの名無しさん
NGNGdクス。調べてみます
0192デフォルトの名無しさん
NGNGつうかdao.find("from User u Where u.Username='hoge')でええんじゃないの?
0193デフォルトの名無しさん
NGNG0194デフォルトの名無しさん
NGNG業務で使おうって人はどれが多いですか?
0196デフォルトの名無しさん
NGNGmany-to-oneでしょ?
適当にJOINするでしょ。
0197デフォルトの名無しさん
NGNG結局最初にDBありき。
オレテキには、そうするべきだとも思う。
0198デフォルトの名無しさん
NGNG0199デフォルトの名無しさん
NGNGmany-to-oneだよ。
show_sqlをtrueにしてログ見てるとUserを1レコード読み込む度に
StatusにSelect投げて対応する1レコード持ってきてるんだけど。
自動でjoinはしてくれないみたい。設定が悪いのかな?
http://d.hatena.ne.jp/koichik/20040615#1087314385
「しかしですね,SELECTが3回発行されているようです」の上にあるログ。
↑の日記でもそうなってるからそういうものかと思ったんだけど・・・。
0200デフォルトの名無しさん
NGNG気にせずjoinしてくれてるんだけど、なんか設定が違うんかな。
0201デフォルトの名無しさん
NGNGみんなどうしてんの?
0202デフォルトの名無しさん
NGNGつまり、DataSourceがうまく設定できない自分の無力さを悩んでいるだけだと思われるが。
俺はとくに問題なくDataSource使ってる。
0203177
NGNGでは202さんに聞いてみましょう。
先生教えてください!>202
といっても何て設定して駄目だったか書かないといけませんね。
客先常駐になっちゃったから、ちょっと待っててください。
今日はJavaWorldのアンチパターンの記事を読んで、目から鱗でした。
まだまだ未熟者です。ガンガリまーす。
0204デフォルトの名無しさん
NGNG0205デフォルトの名無しさん
NGNG<property name="connection.datasource">java:comp/env/jdbc/test</property>
とやってるだけで、特別なことはやってないけど。
0206デフォルトの名無しさん
NGNG0207デフォルトの名無しさん
NGNG0208デフォルトの名無しさん
NGNG質問に答えてない。
>>206
HibernatorもHibern8もイマイチだから、XDocletの直書きがやりやすい。
>>208
質問に答えてない。
0209デフォルトの名無しさん
NGNG>>>208
>質問に答えてない。
たしかに 208 は質問に答えてないな...
0210デフォルトの名無しさん
NGNG0211206
NGNG手書き一回ですか。なれた人はそうなんですね。
いろいろと考え直す事が多い私にはちょっと無理です。
> 208
ワラタ。XDoclet、ちょっと調べましたが、
* @hibernate.property
*column="FIRSTNME"
って感じでメソッドの上にずらずら書くだけで自動生成
してくれるんですね。xml手書きよりはずっと楽そうです。
GUIでやるより結果的には楽なのかも。
>> 210
ttp://www.hibernate.org/102.html
なるほど。先にDBに表を定義してしまうんですね?
0212デフォルトの名無しさん
NGNGRDBのためのツールはたくさんあるし、簡単なスクリプト持ってるやつも多いだろうし。
0213デフォルトの名無しさん
NGNGまったく関係ないけど,あなたDB2のSAMPLEデータベースつかってますね?(笑)
0214206
NGNG確かにそうですね。index張ったり,表スペースいじったりと
結局はDB側をなんとかしないとパフォーマンスでないですしね。
で、Middlegenを試していたのですが、これセットアップ
めんどくさくないですか?ANTが無いと起動もできない。。
build.xmlファイルをいじったり*.jarをコピーしたりして
なんとか動くまでになりましたけど。
>> 213
あたりです。
やっぱFIRSTNMEの微妙なつづりはDB2のSAMPLEだけの特徴かな。
0215デフォルトの名無しさん
NGNGmiddlegenとhbm2javaのタスク書くと、だらだら長くなりますね。
どうせXDoclet使うのだから、antは必要です。
0216デフォルトの名無しさん
NGNGmaven使えば多少はmiddlegenの煩雑さから開放されるかも。
0217デフォルトの名無しさん
NGNGクリテリアじゃなくてクライテリアだから。言っとく。
0218206
NGNGもう一つだけ教えてください。
DBに表を作成
-> Middlegenで*.hbm.xmlを作成
-> hbm2javaで*.javaを作成
という流れだと思うのですが、XDocletをどこで
使うのですか?
*.javaに手で@hibernateを追加するのですか?
それとも@hibernateも自動的に作成される?
0219デフォルトの名無しさん
NGNGマッピングの調整。
最初から全部Middlegenで設定するのは不可能だし。
っていうか、Middlegenで設定するのはめんどうだから、自動生成だけして、設定はXDocletでやる。
XDocletタグは、なんかフラグ立てれば自動的に生成される。
実際には、
->Middlegenでhbm作成
->hbm2javaで*.javaを作成
->XDocletでhbmを作成
となるようにしておく。
そうしないと、テーブル追加したときがめんどくさい。
テーブル追加したときはhbm2javaで該当テーブルだけ*.javaを精製するようにする。
hbmは全部上書きされちゃうので、XDocletでもとにもどすというわけ。
0220デフォルトの名無しさん
NGNG○hbm2javaの部分で
0221206
NGNG即レスありがとうございます。参考になります。
やっぱり@タグは自動生成できるんですね。
0222デフォルトの名無しさん
NGNG0223デフォルトの名無しさん
NGNG無限に取り続けそうで怖くて使えね。
0224デフォルトの名無しさん
NGNGみなさんはどのように検索していますか?
0225デフォルトの名無しさん
NGNG柔軟な条件の拡張がやりやすいから。
条件にあうものから10件取得しつつ、検索全件数を取得、とかがやりやすい。
Criteriaでの件数取得はパッチ当てる必要があるけど。
0226デフォルトの名無しさん
NGNGパッチって、Hibernateにパッチを当てる必要があるという事ですか?
0227デフォルトの名無しさん
NGNG0228デフォルトの名無しさん
NGNGどうだろうか?
0229デフォルトの名無しさん
NGNG0230デフォルトの名無しさん
NGNGとにかく簡単、明解なんで。
0231デフォルトの名無しさん
NGNGマッピングしてる感じで。
0232デフォルトの名無しさん
NGNGBLOBとかつかえんのが困るけど、他のマッピングツールとかって対応してるのかな?
0233デフォルトの名無しさん
NGNGttp://www.theserverside.com/blogs/showblog.tss?id=Hibernate3_JDBC
字は読んでないけど、iBatisにメロメロなあなたにピッタリ、と書いてある気がする。
まだやっとテストが始まった段階でbetaも出てないけどね。Hibernate3。
0234デフォルトの名無しさん
NGNGなるほど。HibernateでもSQL(HQLでなく)が書けるようになるんですね。
<sql-insert>INSERT INTO PERSON (NAME, ID) VALUES ( UPPER(?), ? )</sql-insert>
って感じで。
あと、ちょっとスレ違いだけどS2DAOもSQL直で書けてよさそうです。
ttp://homepage3.nifty.com/seasar/s2dao.html
0235デフォルトの名無しさん
NGNGあんま旨味ねーなぁ
0236デフォルトの名無しさん
NGNGSQL直書きの薄いラップが必要な箇所というのが部分的に必ずあって、そのためにHibernateを使うことをあきらめることになってたりするからねぇ。
0237デフォルトの名無しさん
NGNGHibernate使用時の表結合のあたりはどうなったんだ?
0238デフォルトの名無しさん
NGNG神とされてたサイトに結合の記述がまったくなかっただけ。
0239デフォルトの名無しさん
NGNGまたこないかな。
0240デフォルトの名無しさん
NGNG数が増えると大変です。
まとめてhbmファイルを指定する方法はあるんでしょうか?
0241デフォルトの名無しさん
NGNGおせーて
0242186=199
NGNG上で結合で困ってた物ですが教えてください(つД`)
from User user inner join fetch user.Status status inner join fetch user.Group group Where user.Username=?
↑みたいにfetchで全テーブル指定すれば目的のオブジェクト(User)だけ返ってくるのはわかったけど
毎回必要の無いテーブルまで全て指定しないといけないのが激しくダルいです。orz
今3つだからまだ我慢できるけど関連テーブルさらに増えたらやってられんす。
0243デフォルトの名無しさん
NGNGそんなあなたにiBatis
どんな結合であろうと、複雑なSQLであろうと完璧対応です。
insert, update, delete もトランザクションで完璧です。
0244デフォルトの名無しさん
NGNG検索すればいくらでも出ると思うけど。
hbm.xmlにmany-to-oneとか核だけ。
0245デフォルトの名無しさん
NGNGその例だったら別に from User user where user.Username=? で
全部の関連がつながった User が帰ってくると思うけど。
0246デフォルトの名無しさん
NGNG確か前スレ47ノサイトでは
Object obj1 = obj[0];
Object obj2 = obj[1];
Object obj3 = obj[2];
みたいなことしてたんだっけ?(うろ覚えだけど)
0247デフォルトの名無しさん
NGNG0248デフォルトの名無しさん
NGNGS2Dao使え!
0249デフォルトの名無しさん
NGNGsession.createCriteria(User.class).add(Expression.eq("Username", aaa));
とかでついてくるし。
0250242
NGNGうちでfetchを指定しないでそれやると>>246に書いてあるように
[User,Status,Group]のオブジェクト配列がさらにレコード数分Listに格納されて返ってきまつ。
>>247
今many-to-oneの設定はこんな感じだけどさらに何か記述すれば自動で結合してくれるんですか?
ドキュメント見ていくつか試したけどうまくいかないのです。
User.hbm
<many-to-one
class="Group"
name="group"
not-null="true"
>
<column name="group" />
</many-to-one>
>>248
それも興味はあるけどこれはこれで覚えたいんですよ。
>>249
Criteriaではうまくできたけど
ちょっとソート順とか変更したいだけとかでもソースの修正が必要になりそうでちょっと抵抗が・・・。
基本的にはHQLを外部ファイルに記述して読み込みたいと思ってます。
0251デフォルトの名無しさん
NGNG0252デフォルトの名無しさん
NGNG0253デフォルトの名無しさん
NGNGlazy-loadingはone-to-manyでは?
0254デフォルトの名無しさん
NGNG関係ないけど、HQLを外部化するのってどうなの?
なんかメンテ性あがる?
コンパイルするのがめんどくさいというだけ?
0255デフォルトの名無しさん
NGNGouter-join="auto"
とか。
0256デフォルトの名無しさん
NGNGcountしたいときはListでとってsize()呼ぶしかないのかな。
0257デフォルトの名無しさん
NGNG0258デフォルトの名無しさん
NGNGそんなことはないと思うが
0259デフォルトの名無しさん
NGNG自分の無知さをさらけだしてますな。
0260デフォルトの名無しさん
NGNG257はそうでもないと思うが
0261デフォルトの名無しさん
NGNG0262225
NGNGThis is an experimental API
ttp://www.hibernate.org/hib_docs/api/net/sf/hibernate/Criteria.html
experimental ・・・・実験的な orz
0263デフォルトの名無しさん
NGNG詳細は自分のblogで書くとしても。
ttp://d.hatena.ne.jp/koichik/
0264250
NGNGおお。日記の人ここ見てたんだ。
http://d.hatena.ne.jp/koichik/
解説ありがとう。
0265デフォルトの名無しさん
NGNGuserテーブルとuserDataテーブルが結合されてて
Query q = sess.createQuery("from User as s where s.userName = :userName");
q.setString("userName", "イチロー");
for(Object o : q.list()){
User user = (User)o;
System.out.print (user.getUserName() + "-");
System.out.println(user.getUserData().getAverage());
}
とやると、ちゃんとuserDataからデータひっぱってきてくれるんだけど。
0266デフォルトの名無しさん
NGNGぐはぁっ
>>257
http://d.hatena.ne.jp/koichik/20040826#1093545210
>>265
ひっぱってきてくれるけどSQLはN+1回出てるはず
q.list()で1回とgetUserData()ごとに1回
それを避けたい場合の話
0267263
NGNG0268デフォルトの名無しさん
NGNG> ひっぱってきてくれるけどSQLはN+1回出てるはず
え、1回でやってるけど・・・と思ってSQLのログよく見たら、joinしてない。
でもgetUserDataごとにあるはずのSQLがログに出てない。
なんでだ?と思ったら、直前にCriteriaを試してたので、そのキャッシュを使ってるらしい。
ということで、1件ごとにSQLを発行するのが問題なければOKだけど、joinしたければ明示的に記述
しろ、ってことか。
0269デフォルトの名無しさん
NGNG0271デフォルトの名無しさん
NGNGよろしこ
Criteriaの件数数えたいときにはどうしたらいいんだろうね。
HB-474にVoteするしかないのかな?
0272デフォルトの名無しさん
NGNGて、うざすぎ
0273デフォルトの名無しさん
NGNGttp://opensource.atlassian.com/projects/hibernate/browse/HB-474
0274デフォルトの名無しさん
NGNGorz
>>273
voteしたから許して。
でも、ちょっと見た感じCOUNTだけでAVGとかは無理?
GROUP BYやHAVINGも?
別の手も欲しいかも。
0275デフォルトの名無しさん
NGNG話の流れとして、Aggregateクラスを導入してこんなのようよ?となってるみたい。
Criteria criteria = session.createCriteria(Some.class)
.add(Expression.eq("any", value);
Aggregate aggregate = criteria.aggregate();
Double sum = aggregate.sum("property");
Double avg = aggregate.avg("property");
long count = aggregate.count(); // would "property" be needed here?
List objects = criteria.list();
そして、拡張性がないだろ、ってことで却下されている。
sumのmaxとかどうするのさ?みたいなね。
group byできるように考えると行き詰まるようだ。
春の話みたいなので、今どうなっているのかわからないけど。
ttp://www.mail-archive.com/[email protected]/msg03389.html
0276デフォルトの名無しさん
NGNGhttp://orbroker.sourceforge.net/
任意のSQLが書けるのがiBATISとの共通点で、
使用するクラスがbeanでなくても良い(任意のクラスでよい)
のが売りみたい。
0277デフォルトの名無しさん
NGNGつかれてくるな....
0278デフォルトの名無しさん
NGNG0279デフォルトの名無しさん
NGNG0280デフォルトの名無しさん
NGNG0281デフォルトの名無しさん
NGNG0282デフォルトの名無しさん
NGNGあとは好みだろ。
0283デフォルトの名無しさん
NGNG実際の開発に入れば、モデラーより、どんな強力で柔軟性のあるマッピングしてくれるかの方が大事だと思うけど。
0284デフォルトの名無しさん
NGNGだってEOFのドキュメントと同じようなこと書いてあるんだもん。
0285デフォルトの名無しさん
NGNGや、はなからそういう「オープンソース版の EOF」みたいなのを目指して
作ってるんじゃなかったっけ....?
おれはむしろその思想に興味を持って使いはじめたクチです。
で、後から WebObjects も買ったけど、いまでは Cayenne しか使ってない(笑)
0286デフォルトの名無しさん
NGNG0288デフォルトの名無しさん
NGNGそこに書いてあるCayenneのいいところって、GUIツールが付属ってとこだけじゃん。
あとのサンプルは、HibernateのCriteriaでも同じようにできることだし。
GUIツール使いたければMiddlegenがあるわけだから、Cayenneの特徴がよくわからん。
0289デフォルトの名無しさん
NGNGなるほど。
いわれてみればHibernateのCriteriaって、
session.createCriteria(Cat.class)
という使い方をするように、
「永続オブジェクト(この例ではCat)のリストを取得する」
ことが主目的で(例外はALIAS_TO_ENTITY_MAPを使った場合)、
任意の結果を得たければHQLを使えということか。
だからSELECT句を指定する手段が無くて、そのために
GROUP BYで破綻するのかも。
対応を考えるのは悩ましいね。
0290デフォルトの名無しさん
NGNGハイバネート触ったこと無いんでよく分からんが、
JavaコードかDBスキーマがまずありきで、それをマッピングを介して
変換する感じでしょ?
どっちもない場合にマッピングを書いてコードとスキーマを生成する場合は、
手書きでマッピング書かないといけないの?
Cayenne の場合、DBスキーマありきでリバースしてクラス作るのもありだけど、
GUIモデラでモデリングして、そこからコードもDBスキーマも生成する、
ってのが取っつき易いかも。
(モデラが吐くマッピングファイルは XML だから手編集も可能)
まー正直 GUI モデラがまだ貧弱でもっと進化しないとだけど、
どっちも似たり寄ったりってことでいいんじゃねーの。
国内ユーザ数はハイバネートの方が多そうだから、どっちでも良ければ
ハイバネート使っとくといいんでは。
0291デフォルトの名無しさん
NGNGボトルネックになることが多いのはDB側の処理だし。
で、DBのスキーマを生成するツールはそれこそゴマンとある。
ExcelでDB仕様から生成するマクロ組んでるところも多いだろうし。
Hibernatorだかなんだか、マッピングをまず作成するツールもあるし。
まあ、Hibernateを便利に使うツールは、探せばけっこうある。
問題は、Cayenneは主キーのフィールドを隠すので、かなりやりにくいってことだ。
それにマッピングで実現できない場合の、HQLのような逃げ道がないし。
実際はCriteriaよりもHQLが推奨のようだけど。
どっちも似たり寄ったりというには機能に差がありすぎ。
Cayenneに強いこだわりがない限りはHibernateを使うべきだと思う。
EJB3とのからみなど、将来性を考えてもね。
Hibernateは日本語版のドキュメントも出たしね。
で、Cayenneってどういうところに強いこだわりをもてるのかな、と。
0292デフォルトの名無しさん
NGNGただ、柔軟性を求めるのが難しいのなら、「バカチョン集計」つけて欲しいんだよね。
どっちにしろ複雑な集計はHQLでできるわけだからね。
今のままだと、簡単な集計でもHQL使わないといけない。
0293デフォルトの名無しさん
NGNGDBを覆い隠してしまってオブジェクトだけで操作する。そしてフレームワークの
中にあるものをあまり意識させなくて(XMLの書き方とか)、マッピングだけに
集中できるようにツールを用意する、などなど。
主キーをフレームワークが面倒をみるのがデフォルトというところも、EOFと同じ。
主キーの管理はデータの内容と結びつけるべきではない、主キーはDBの内部的
必要性のためにあるのだ、という考え方みたい。
TheServerSide.com見てても、ポイントは結局Cayenneのモデラーを使った
マッピング作成は、Hibernate+Middlegen+XDocletより簡単だ、というところ
みたい。「既存のDBをHibernateにマッピングするためにXMLをがりがり書いた
が、Cayenneを使うとすぐにできてしまった。それだけで価値がある」とか
いう発言がフォーラムにあった。
しかし一番の差は、HibernateはPOJOをDBにマッピングする技術、Cayenne
はDBをオブジェクトにマッピングする技術っていう、方向の違いじゃないか。
CayenneのデータオプジェクトはすべてDataObjectのサブクラスになるわけ
だし。
0294デフォルトの名無しさん
NGNG周辺ツールが充実してるのはいいことだと思うけど、
最初からオールインワンで使えるほうがもっと良くない?
HQL のような逃げ道は、おれとしてはそういうの書きたくなくて
O/R マッピングフレームワーク使ってるところがあるから
そもそも好きじゃないんだけど(笑)、
SQLTemplate ではダメかな?
http://objectstyle.org/cayenne/userguide/fetch/sqltemplate.html
結局、多少泥臭くても柔軟な方が好きな人は Hibernate がしっくりくるだろうし、
多少不自由でも抽象化されたずっぽしオブジェクトな世界が好きな人は Cayenne が
しっくりくるんじゃない?
一つのテーブルから継承関係にあるクラスを作ったりする機能なんて
けっこう面白げだと思うんだが。
http://objectstyle.org/cayenne/modelerguide/modeling-object-layer/inheritance.html
0295デフォルトの名無しさん
NGNGマッピングが貧弱でSQLテンプレートばっかり使うならiBatisやS2DAO、SpringJDBCの方がいいんじゃないかとも思うしね。
継承のマッピングは面白いんだけど、Hibernateでもできそうな気配。
ttp://www.hibernate.org/hib_docs/reference/ja/html/inheritance.html
0297デフォルトの名無しさん
NGNGまー、クソ設計だからそうなるんだがな
俺が設計したワケじゃないからしゃーない
0298デフォルトの名無しさん
NGNG一発SELECTでもってきて、わー早くなったーとか喜んでる
SQL大好き野郎なんで、S2Daoはちょっと使ってみたく思っています。
0299デフォルトの名無しさん
NGNG貧弱ってことばはふさわしくないかもしれないんだけど、すべてが賄えるほど強力じゃない。
ひととおりは揃ってるんだけどね。
ちょっとみた感じHibernateのCriteriaと同等みたいだから、優位性が。
HibernateならHQL使えるから、Criteriaが強力である必要があまりないんだよね。
というかSpringとかSeasarのサポートがない時点で、使うの萎える・・・。
0300デフォルトの名無しさん
NGNG本末転倒だと思ってるんで、複雑な結合とかはビュー作って、
フレームワーク側からはもうほとんど1テーブルそのまま持ってくるのと
親子関係にあるレコードを toHoge() で取り出すくらいしかやってないなあ。
どんな道具も万能じゃないんだから、適所適材ってことじゃないすかね。
0301デフォルトの名無しさん
NGNGCayenneが使えるところであればHibernateは完全に使えるけども、Hibernateが使えるところでもCayenneは使えないことのほうが多い、と。
0302デフォルトの名無しさん
NGNG0303301
NGNG0304デフォルトの名無しさん
NGNG0305デフォルトの名無しさん
NGNGこんなのどう?
ttp://d.hatena.ne.jp/koichik/20041019#1098208806
これでもcountのmaxとかはできないけど。
HQLのBNF見たらそんなのできるようになってなかったから。
0306292
NGNG乙。
HQL生成するんだね。
いいかも。
Expressionは欲しいときに自分で実装と。そしてここに貼り付ける、と。
本家のCriteriaってこういうことできるようになる気配はないんだろうか・・・
0307デフォルトの名無しさん
NGNG関連テーブルのせいで、同じのがいっぱい取れて・・・。
0308デフォルトの名無しさん
NGNG3.0alphaでも変わり映えしないみたいね。
>>307
setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
0309デフォルトの名無しさん
NGNGttp://orbroker.sourceforge.net/
0310292
NGNG> > Another option would be to have a parallel hierarchy
> > of HQL based Criteria objects. This may be the
> > easiest way to get started, and this way we could see
> > if it was feasible before committing to it. I would
> > be happy to take a go and doing a first pass myself.
> That sounds really ugly.
斬って捨てられてますな。
ttp://sourceforge.net/mailarchive/forum.php?forum_id=7517&max_rows=25&style=nested&viewmonth=200401
0311デフォルトの名無しさん
NGNGこいつはいいよ。
SQLテンプレートではなくマッピング使うメリットとして大きいかも。
例えば、memberテーブルのtypeフィールドによって処理が違う場合をポリモーフィズムで実現できる。
それとmemberテーブルとpurchaseテーブルは1-多なんだけどpurchaseテーブルに登録できるのはtypeが2のときだけ、とかをJavaの型で保証できる。
0312デフォルトの名無しさん
NGNG当たり前だけど、念のため。
0313デフォルトの名無しさん
NGNG0314デフォルトの名無しさん
NGNG0315デフォルトの名無しさん
NGNG0316デフォルトの名無しさん
NGNG0317デフォルトの名無しさん
NGNG0318デフォルトの名無しさん
NGNG0319デフォルトの名無しさん
NGNGそれをnullにするか関連先のオブジェクトを設定するかしないといけないから
どうしようもないような。
関連を外すか、関連先を使わなくてもfetch joinする方がいいかも。
もしかするとHibernate3にプロパティレベルでのlazy initializeみたいな
ことが書いてあったので、それが解決策かも?
0320デフォルトの名無しさん
NGNGなんでだろう。
0321デフォルトの名無しさん
NGNGだから、レコード使うときに主テーブルと副テーブルの両方への問い合わせで、あわせて2問い合わせを発行してしまう。
全然意味なし。むしろSQLの発行量が倍。
同じコード/マッピングのままHibernate3alpha使ってみたけどいっしょ。
なんかコードかマッピングか変更したらいけるんだろうか。
それにしても、one-to-one使ってる人は、実際どうやってるんだろう。
0322デフォルトの名無しさん
NGNGiterate()だと関連なくてもそうなる。
Session#find()またはQuery#list()でfetch join使えばSELECTは1回になるはず.
0323デフォルトの名無しさん
NGNGSession#findはHibernate3で使えなくなるので使わないようにしてるというのは置いといて。
Query#listでfetch join使ってもレコードごとにselectが発行されちゃってます。
Hibernate3のpropertyレベルlazy access、リファレンス見るとほんとにpropertyにlazyが付けれるだけでone-to-oneには付けれないみたい。
実際にlazyつけたらalphaではまだ対応してないみたい。
これも試してみたんだけど。
How do I set up a 1-to-1 relationship as lazy?
ttp://www.hibernate.org/117.html#A16
0324デフォルトの名無しさん
NGNG副テーブルが主テーブルとは違う主キーを持って、別に外部キーを持つようにして、property-refを使ってたんだけど
there are some problems with one-to-one property-ref in 2.x that are fixed by Hibernate3
ということで、property-refを使うone-to-oneはHibernate3ではうまく動かないみたい。
っていっても、Hibernate3alphaでもうまくいってないんだけど。
とりあえず、副テーブルが主テーブルと同じ主キーを持つようにしたらちゃんとlazyになりましたです。
0325デフォルトの名無しさん
NGNG1対1で外部キーを使う場合はなぜかmany-to-oneを使うことになってます。
リファレンスの例もそうなってる。最初は間違ってるんだろうと思ったけど
Hibernate in Action に解説があった。orz
0326デフォルトの名無しさん
NGNGそれってなんでなん?
0327デフォルトの名無しさん
NGNGくらいにしか書いてない。
気持ち悪いけどそういうものだと憶えるしかないらしい。
0328デフォルトの名無しさん
NGNGでも、大差ないならone-to-oneにしてくれればいいのに。
0329デフォルトの名無しさん
NGNGone-to-oneって、すごく使いづらい気がする。
主テーブルのキーはsequenceで、副テーブルのキーはforeignにしてると、まず主テーブル側を追加しようとすれば副テーブルデータが永続化されてないので怒られ、副テーブル側を追加しようとすればキーが決めれないので怒られ。
それではと主テーブルのcascadeをsave-updateにすると、先に副テーブルのデータを追加するもんで、そのキーが主テーブルにないのでデータベースに怒られ。
0330デフォルトの名無しさん
NGNG0331デフォルトの名無しさん
NGNGjoined-subclassで,Hoge <-- SubHogeと継承を定義して,
session.find( "from Hoge h where h.class = SubHoge ");
で検索すると, なにも返ってこないのですが,discriminatorを定義した
subclassじゃないと使えないのでしょうか?
HQLを使って,HogeクラスのSetを下位クラスの型でフィルタしたいの
ですが,うまい書き方があれば教えてください.
下記リファレンスを参考にしたんですが…
ttp://www.hibernate.org/hib_docs/reference/en/html/queryhql.html#queryhql-where
from eg.Cat cat where cat.class = eg.DomesticCat
0332デフォルトの名無しさん
NGNGだとうまくいかないんですね?
0333デフォルトの名無しさん
NGNGfrom SubHoge
だけであれば,SubHogeの全インスタンスが問題なく戻ってきます.
具体的にやりたいのは,
HogeのサブクラスSubHogeA,SubHogeBがあり,
SubHogeBとHogeにmany-to-manyの関連を定義.
あるSubHogeBに関連する,SubHogeAの全インスタンスを
列挙する って操作です.
SubHogeBから関連をたどって,HogeのSetを取得,A,Bに分類した
上で,Bについては,再帰的に探索する,という感じに考えていたんですが.
0334デフォルトの名無しさん
NGNG参考になるかは謎だけど…
リファレンスに書いてあるように、where句に埋め込まれたクラス名は
discriminatorの値に変換されるらしい。
ところがjoined subclassだとdiscriminator値は指定していない。
でも抜け道はあって、マッピングファイルに記述した並びで
0から順にdiscriminator値が割り当てられているように扱えるっぽい。
BaseのサブクラスとしてSub1とSub2がこの潤で定義されているとすると、
Baseは0、Sub1が1、Sub2が2。
よって、次のように記述するとSub1のみ取得できる。
from Base b where b.class = 1
0335デフォルトの名無しさん
NGNGありがとうございます.マッピングファイルはXdocletで生成しているので,
並び順に頼るのも難しいです.
結局,idを条件に使うことで解決しました.
from Hoge h SubHoge s where h.id = s.id
0336デフォルトの名無しさん
NGNGhttp://www.objectstyle.org/cayenne/
0337デフォルトの名無しさん
NGNGなぜか主キーが1つのテーブルのみupdateメソッドとdeleteメソッドで
こんなエラーが出ます。
誰か原因知っている人いませんでしょうか?
net.sf.hibernate.NonUniqueObjectException:
a different object with the same identifier value was already associated with the session: 001, of class: test.model.vo.NdMemo
0338デフォルトの名無しさん
NGNGfindとかloadしたオブジェクトとは
「別のインスタンスだけど、主キーが同じもの」を作って
それをupdate/deleteしてないかい?
0339デフォルトの名無しさん
NGNG返信ありがとうございます。
たしかに、別のインスタンスで主キーが同じものを作っています。
ということは、update/deleteをする場合は、一度ビジネスロジック側で
loadなりfindなりして、インスタンスを生成し、それに対して変更する
値をセットするという形の実装になるのでしょうか?
0341デフォルトの名無しさん
NGNG0342デフォルトの名無しさん
NGNGまず、Session#update()はいわゆるオブジェクトの更新ではない、
ということに注意。
update()は、以前に別のセッションで取得した永続オブジェクトなどを
現在のセッションに関連づけるために呼び出すもの。
結局は更新されるんだけど、単に更新するだけならfind()等で取得した
永続オブジェクトのプロパティを変更すればいいだけ。
update()を呼ぶ必要はない。
もし、339が生成したオブジェクトの内容をHibernateに
更新してもらいたいのなら、update()を呼び出すのは間違いとは
言い切れない。
しかし、残念ながらそのセッションで同じ主キーを持った
永続オブジェクトをfind()等で取得済み(自覚ないみたいだけど)
なので例外が吹っ飛んでくる。
更新したければ,
セッションから取得したオブジェクトを変更するか、
セッションで取得したのと主キーが重ならないのをupdate()に渡すか、
二つに一つ。
0343デフォルトの名無しさん
NGNGdelete()でも同じセッションに主キーが同じ永続オブジェクトがあると
その例外が吹っ飛んでくるよー。
0344デフォルトの名無しさん
NGNG0345デフォルトの名無しさん
NGNGhttp://incubator.apache.org/projects/ibatis.html
0346デフォルトの名無しさん
NGNG名を知られそうでいいように思いますね。
0347デフォルトの名無しさん
NGNG同感。
個人的にHibernateとかの大がかりなO/Rマッピングソフトより、
やる事が単純な分、使いやすくて、理解しやすいのがいい感じ。
名前が売れて、メジャーになってくれれば、
プロジェクトで採用しやすくなるので、今後が楽しみ。
0348デフォルトの名無しさん
NGNGいいつつApacheはOKってなところがあった。
まあHTTPサーバだけを指してるんだろと思ったけど、話してるとApacheが
HTTPサーバ以外も出しているってこと自体をよく分かってなかったみたい。
もしかしてApache iBatisという名前ならおkが出るんだろうかw
0349デフォルトの名無しさん
NGNGせっかく誤解してくれてるんだから。
0350デフォルトの名無しさん
NGNG頭の中身がレガシーな漏れの同僚たちにも受け入れられやすいと思う。
0351デフォルトの名無しさん
NGNGXDoclet1.2.2でhibernate.cfg.xmlもつくれるし。
0352デフォルトの名無しさん
NGNGGroup Byの集計単位が異なるテーブルを外部結合したい時とかに
個別に全行Fetchしてから自前ハッシュ結合しなきゃいけないのか・・・。
なんかMySQL使ってるみたいで鬱になる(´・ω・`)ショボーン
その辺をDBに依存せずに書けるようになるといいんだけどなぁ。
結合するまでWhereで行数減らせなくて、さらに行数の予測ができない
場合だと致命的かも。こういうの業務系だと頻繁にあるし。
こういう制限ってどうやって対処してんの?>Hibernate使いの皆様
0353デフォルトの名無しさん
NGNG俺はハイバネート使いではないが、ある程度複雑な SQL になったら、無理矢理
プログラム側でどうこうしようとしないで DB 側に View 作ってるよ。
何でもかんでもプログラムで実現するのはムダな努力だと思う。
楽するためのもので苦労する必要はないだろう。適所適材で。
0354デフォルトの名無しさん
NGNG0355デフォルトの名無しさん
NGNGORマッピングは、複雑なSQLをどうにかしてくれるもんじゃないからねぇ。
0356352
NGNGそれしかないよなぁ・・・。
割り切ってしまえば問題はないんだけど、Unit Testを
HSQLDBでテーブル作成から行って、実稼動はOracleなんて
構成にしようと思うと、DBに依存するとやりづらくなるから。
あれ?HSQLDBってそもそもインラインビュー使えんのか?
0357デフォルトの名無しさん
NGNGごちゃごちゃ言ってないで早く寝なさい!
0358デフォルトの名無しさん
NGNG0359デフォルトの名無しさん
NGNGSQL厨にマッチするのはiBatisでしょ。
0360デフォルトの名無しさん
NGNGさすがに無理がないかい?
テストのためにアーキテクチャをひずますのも本末転倒だし。
0361デフォルトの名無しさん
NGNGhsqldbのユーザーマニュアルの、SELECTの項を見る限りでは、使えるように思える。
FROM句の次に「sqlstatement」って書いてあるし。
0362352
NGNGそれが嫌だからO/Rマッピング使いたいんじゃん。
でも、O/RマッピングがSQLと比べてまだまだ貧弱だってこと。
>>360
そんな無理あるのかな?
現状は無理でも、DBへの依存を断ち切ることはO/Rマッピングの
究極の目標なんじゃないのかって思ってるんで。
開発環境のDBってゴミデータに埋もれがちで、動かないのが
データのせいなのか、プログラムのせいなのか解析するのに
手間がかかることよくあるし。
DBを扱う場合のUnit Testって、データまで含んで完結するしさ。
それに、複数環境で動かせられるってのが必須って要件は少ないと
思うけど、可能にできるならば品質の向上にも効果あると思う。
0363デフォルトの名無しさん
NGNGwhere句の条件式がコロコロ変わるようなのだと
キツいかと思った。
SELECT * from Employ WHERE name=? or tel=? or ・・・項目いっぱい
みたいので、telが存在しない場合は条件式に含めない、となると同じようなSQLをプロパティファイルに
いっぱい記述するかWHERE句だけ動的に生成するか。で動的に生成するとせっかくSQLを
外部ファイルに出している意味が激減。
iBatisなんかはどうなんでしょう。
0364デフォルトの名無しさん
NGNGDBのUnitテストはDBUnitを使えるときは使ってますが
362タンはどうしてます?
DELETE INSERT でテストデータを投入するのはUnitテスト的には
かくあるべきと思うのだけれどもテスト用スキーマを作らせてくれない
環境だと使えない。
0365デフォルトの名無しさん
NGNGttp://www.hibernate.org/30.html
Cayenne開発版は1.2 M1になってますね。
ttp://objectstyle.org/cayenne/release-notes/RELEASE-NOTES-1.2M1.txt
CayenneってV1.2でID列(自動インクリメントの列)をサポート
するみたい。リリースはまだまだ先でしょうけど。
0366デフォルトの名無しさん
NGNG> 現状は無理でも、DBへの依存を断ち切ることはO/Rマッピングの
> 究極の目標なんじゃないのかって思ってるんで。
現実的に無理だね。
DBに進化を止めてもらわないかぎりは。
構文的に問題なくても、DB機能の違いが多すぎる。
ORマッピングは、DBを考えなくてよくするしくみではなく、DBはDBで、JavaはJavaで考えれるようになるしくみだし。
良くも悪くも、単なるマッピングだよ。ラッパーじゃない。
それにここで問題にしてるのは、マッピング機能ではなくて、HQLの表現力という話だね。
環境依存SQLをラップする共通言語が欲しい、HQLにその役割をもって欲しいってことでしょ?
0367デフォルトの名無しさん
NGNGマッピングしてまえっ、って感じか。ORマッピングというよりは、Object-SQLマッピングという感じ?
0368デフォルトの名無しさん
NGNG> 現状は無理でも、DBへの依存を断ち切ることはO/Rマッピングの
> 究極の目標なんじゃないのかって思ってるんで。
DBに依存しないのに、何故OとRをマッピングする必要があるのかと。
素直にOODBを作ったほうがいいんじゃないかとさえ。
0369デフォルトの名無しさん
NGNGiBatisは動的なSQLが可能。
if これが0以上ならとか
0370デフォルトの名無しさん
NGNG俺もそう思う。オブジェクト指向かXMLでやるのが自然だな。
現在のO/Rマッピングはあくまでマッピングだから、RDBMSが持つようなスケジューリングの最適化機能なんてのは無い。
もしあったとしても特定のRDB製品限定にならざるおえないから、O/RマッピングツールのどのRDB製品でも同じようにっていう概念と相反してしまう。
0371352
NGNGDBUtilsはゴミだな。
名前付きパラメータすら使えないし、型マッピングが固定だし、
パラメータにnull渡せないし、コネクション引っ張りまわすか、
毎回DataSourceから取得する作りだし。
実際使ってる人がどうやってるか知らないけど、まともに
使えるようにするには相当被せなきゃだめっぽい。
>>364
DBだけってのはあきらめて、ロジック側でデータ足したり
しながらやってるよ。テスト終わったらRollbackして。
>>366
>それにここで問題にしてるのは、マッピング機能ではなくて、HQLの表現力という話だね。
>環境依存SQLをラップする共通言語が欲しい、HQLにその役割をもって欲しいってことでしょ?
話ずれたけど、主題としてはこれを言いたかった。
DBってあまりに標準ってものがなさ過ぎるから。
そのためのツールとして、現時点では理想と現実の折り合いで
一番センスいいな、と思ってるのがHibernateだから、
多くのDBで普通に書けるSQL程度はサポートして欲しい、と。
>>368,370
究極の目標って書いたのは、DBの持ってる機能は最大限利用しつつ、
それを意識せずに使えて、十分なパフォーマンスが得られるってことだよ。
その時にはO/Rマッピングとは呼ばなくなってるかもしれないけど。
ちょっと極論すぎてぼやけてきたんで、どうでもいいけど。。
0372デフォルトの名無しさん
NGNGでも、やっぱりリレーショナルモデルとオブジェクトモデルという異なったモデルを使う以上は、完全なラップは無理そうだ。
アプリケーションを高度に部品化すれば、DBを意識しなくてもよくなるだろうけど、そんときはORマッピングどころの話じゃないしね。
0373デフォルトの名無しさん
NGNG>>362じゃないけど、
環境標準のテストデータを整備して、
setUpメソッドで、自分のテストデータを投入して、
tearDownメソッドで、標準のテストデータを投入するのはどう?
あるいは、setUpメソッドで既存のDBデータを読み込んでIDataSetに格納して、
tearDownメソッドでDELETE_INSERTするとか。
(えらく時間がかかりそうだし制約とかがからむとヤバそうだが)
スレ違いかも・・・スマソ
0374デフォルトの名無しさん
NGNGhttp://opensource.atlassian.com/projects/xdoclet/browse/XDT-1161
解決法知ってる人いたらきぼんぬ。
top-down で開発するつもりだったけど、@hibernate 書いて xdoclet 動かして、
想定通りの hbm.xml が生成されてるか確認するぐらいなら、
最初から hbm.xml 書いた方が楽だと思った。middle-out で開発しようか思案中。
0375デフォルトの名無しさん
NGNGたぶん、それだとJavaコードの自動生成とかDBの自動生成で不満がでるんじゃないかと。
XDoclet使うのがいやなら、テーブルは別に作って、Javaコードとhbm.xmlを別々に書いたほうがいいと思う。
どちらにしてもテーブルは自力で作って、一発目のクラスとhbmはbottom-upで作った方がいいと思う。
あとは、XDocletを使ってJavaコードだけをいじるか、Javaコードとhbm.xmlを別々にいじるか、にしたほうがいいと思われ。
0376デフォルトの名無しさん
NGNGマニュアルとか見てみたけど、ORMの機能は
十分揃ってそうだし、GUIのマッピング
ツールもよさげ。値段、高いんかな。
http://www.oracle.com/technology/products/ias/toplink/
http://otn.oracle.co.jp/products/ias/toplink/
0377デフォルトの名無しさん
NGNGこれに入ってるらしい。
http://www.sourcenext.com/products/oracle_jd/
0378デフォルトの名無しさん
NGNG商用だけあって、GUIとかマニュアルとか
ちゃんとしているし。
RDBMSがOracleしか選択しないのであれば、
悪くない選択だと思います。
Oracle以外のRDBMSでも動くけど、
サポート面が恐いよな。
0379デフォルトの名無しさん
NGNGttp://objectstyle.org/cayenne/
ttp://www.theserverside.com/news/thread.tss?thread_id=30414
SQLTemplate (think iBatis inside an ORM, without XML in queries, editable via GUI), distributed caching, expression parser, inheritance mapping, professionally looking Modeler, etc.
SQLTemplateっていう新機能でiBatisのように、
任意のSQLが投げられる、しかもGuIで作業できるって事か?
0380デフォルトの名無しさん
NGNG0381352
NGNG@hibernate.collection-keyが抜けてるからじゃない?
ドキュメントだとcolumnが書けるように見えるけど、
xdt側では何も見てない。
@hibernate.set
lazy="true"
cascade="none"
name="CAPABILITY_ID"
@hibernate.collection-key
@hibernate.collection-key-column name="ENTITY_ID"
@hibernate.collection-key-column name="CAPACITY_ID"
@hibernate.collection-one-to-many
class="solutionCapability.VoiceCapability"
0382デフォルトの名無しさん
NGNG0383374
NGNG@hibernate.collection-key の column は省略不可って
書いてあるから、試してないけど、今度試してみます。
middle-out に移行したので、すぐには試せないけど…
つーか、buttom-up で @hibernatedoclet 吐いてるのって、
middlegen だったのね。@hibernatedoclet 付の .java に戻すには、
中→下→中→上 と生成しなきゃダメなのか…。
0385デフォルトの名無しさん
NGNGDB仕様書から吐くマクロ作っておけば無問題。
0386デフォルトの名無しさん
NGNG0387デフォルトの名無しさん
NGNGコメントなど日本語の部分が全部文字化けする・・・と思ったが
OSのデフォルトエンコードで出力されるんだね。(プロジェクトはUTF-8)
いまはGeneratorを書き換えてなんとか使ってますが、ファイルエンコードを外部から
指定する方法ってあります?
0388デフォルトの名無しさん
NGNGFK 制約とか cascade とかの、リレーション的機能はHibernateにおまかせ、
という開発スタイルはなんか問題ありますか?
0389デフォルトの名無しさん
NGNGどうなんだろ
別にいいといえば言いが
Hibernateとかのフレームワークって
トランザクションどうしてんの?
0390デフォルトの名無しさん
NGNG0391デフォルトの名無しさん
NGNGHibernateはほとんどの場合使い物にならない
0392デフォルトの名無しさん
NGNGどの辺で疲れたの?
0393デフォルトの名無しさん
NGNG実際のプロジェクトでDBが最初にかっちりと決まっているわけではなく
コロコロ変わったりすることもしばしば
そのような状況の中、コーディング作業も同時進行しちゃうから
そのたんびに設定ファイル書き直しとかいうのがイヤなのでは?
結局、自分のところ自分で修正するならSQL(JDBC)直で書いてあるソースのほうが直しやすい
0394デフォルトの名無しさん
NGNGそれって、それなりの規模があるなら、SQL直で書いてあるソースのほうがいやになりそうだが。
DBのコロコロ変わる変更が、フィールド追加くらいのものじゃなく、構成として変わるような起こるようなら、ORマッピングがどうのじゃなく、その組織自体に疲れたってことじゃない?
ORマッピング使わないにしても、愚直にJDBCプログラムするのは、ただ手間がかかるわけで、なにか仕組み使うだろ。
0395デフォルトの名無しさん
NGNG0396デフォルトの名無しさん
NGNG0397デフォルトの名無しさん
NGNGそれなら、Cayenneのが良さげ。
0398デフォルトの名無しさん
NGNGいろいろあるがこれが根本か、夢を見ていたおいらがあほだった。
あと、
Javaやって6年くらいになるが
・オブジェクト指向厨は運用や保守のことをまったく考えていない
・ソースを読まないオープンソース厨がおおい
・DBはJavaだけのものじゃない
でもiBatisは気になる。
0399デフォルトの名無しさん
NGNG相当レベルの低いところでやってたんだね。
うつってるよ。
0400デフォルトの名無しさん
NGNG気心知れた仲間内でサービスまでやるプロジェクト立ち上げ中。
おいらたちの合言葉
「仕事は適当に切り上げて、夢は家で見よう!」
60%くらいで働けばその辺のやつらの100%以上は十分働けるよ。
全開で頭使うのは会社以外で
0401デフォルトの名無しさん
NGNGデータのコピー処理作業がおそろしく無駄に覚えてきたStrutsで仕事な
今日この頃。
やっぱWebObjects + EOFみたいに、DBのモデルをそのままビューでも
使う、コントローラでも使う、モデルの変更は直接ビューに影響するって
のが楽でいいわ。
0402デフォルトの名無しさん
NGNG> オブジェクト指向厨は運用や保守のことをまったく考えていない
それは OO は関係なく、単に厨だからでは。
0403デフォルトの名無しさん
NGNG> ソースを読まないオープンソース厨がおおい
全体からみればオープンソースのソース読む方がむしろ奇特だと思われ。
0404デフォルトの名無しさん
NGNGBeanUtils使うだけじゃだめなん?
0405デフォルトの名無しさん
NGNGそうゆう輩がおおい。
たいてい、完全なマニュアルもサポートもないオープンソースを使うとき
ソースだけが頼り。
Hinernateのようにマニュアルがこれだけきちんとしているもののほうが珍しい
それでもソースは重要
OpenSourceってどういう意味や精神しってるかい?
昔はオープンソースプロダクトを使うとき必ずコンパイルしたものだ
0406デフォルトの名無しさん
NGNG今は今。
昔は、オープンソースは情報に敏感な一部の技術者が、趣味的にいじることが多かった。
今はオープンソース製品が広く認識されて、特に高いモチベーションを持つわけはない普通の技術者が業務としてオープンソース製品に触れるわけだ。
今はオープンソースと言っても、原理主義的オープンソースから、単にソースが公開されているだけのオープンソースまで、人々の認識は多種多用だし。
0407デフォルトの名無しさん
NGNG政治的思想を広めるという使命を背負ったオープンソース。
同好会的な内輪ノリのオープンソース。
人生色々、オープンソースも色々。
0408デフォルトの名無しさん
NGNG>OpenSourceってどういう意味や精神しってるかい?
マニュアルを販売して、大儲け。
0409デフォルトの名無しさん
NGNGちがうよ、ちょっとした付加機能追加して、有償販売して大もうけ。
0410デフォルトの名無しさん
NGNG0411デフォルトの名無しさん
NGNG0412デフォルトの名無しさん
NGNGウィルス埋め込まれてたらやだけどね。
0413デフォルトの名無しさん
NGNG上下の口もクローズド
入れさせません
0414デフォルトの名無しさん
NGNG問題がおきたとき情報集めてソース読んで対処するのはいつもおいら。
疲れたな
0415デフォルトの名無しさん
NGNGビューは使えなくなるね。
0416デフォルトの名無しさん
NGNG0417デフォルトの名無しさん
NGNG0418デフォルトの名無しさん
NGNG問題が過ぎ去った後
自分の努力を誰も理解してくれない寂しい状況になる
0419デフォルトの名無しさん
NGNG0420デフォルトの名無しさん
NGNG0421デフォルトの名無しさん
NGNG詳細ドキュメントの修正を依頼されたクリスマス
0422デフォルトの名無しさん
NGNGところで、ビューってORMと共存しにくくなかった?
0423デフォルトの名無しさん
NGNG0424デフォルトの名無しさん
NGNG0425デフォルトの名無しさん
NGNG0426デフォルトの名無しさん
NGNG0427デフォルトの名無しさん
NGNG問題なくORでいけるんじゃないか?
0428デフォルトの名無しさん
NGNG>>415
0429デフォルトの名無しさん
NGNGで、結局でかいプロジェクトになるとパフォーマンスでないから
夢見るきれいな形にはなってくれない
0430デフォルトの名無しさん
NGNGヨヨ「オレルスの仲間達!みなさんもちからを!」
「私に力を!強さをください!」
ヨヨ「ビュー……あなたも……お願い……」
「私、ビューには嫌われてる……」
「私がいることで、ビューをいやな気分にさせてしまう……」
「それは分かってるの……」
「でも……ビュー」
「貴方はやっぱりわたしの大切な人なの」
ヨヨ「いまだけでもいいの……わたしに……強さを!」
「あの頃のように!」
ヨヨ「ねえ、ビュー……もっとつよく、つかまってもいい?」
ビュー「……」
ヨヨ「もう……つかまっちゃった……」
0431デフォルトの名無しさん
NGNGちげーよ。きちんとした分析もせずに画面のデータが保存できりゃ
それでよしみたいな腐った非正規化された設計になってるからだろ。
どっかのSヨがExcelで作ったゴミDBを何度見たことか・・・。
非正規化すると、重複データをメンテナンスする必要性が出てきたり、
結局はマスタチェックしなきゃいけなかったりでデメリットも相当多い。
正確に分析してあるべき姿を論理設計
↓
パフォーマンスや簡略化のために非正規化
ちゃんとやってるプロジェクトってどれくらいあるの?
脳内で適切に非正規化できる奴は滅多にいない。
0432デフォルトの名無しさん
NGNG0433デフォルトの名無しさん
NGNG0434デフォルトの名無しさん
NGNG0435デフォルトの名無しさん
NGNG0436デフォルトの名無しさん
NGNGそれでいて残業はしっかりしていくんだよな。
0437デフォルトの名無しさん
NGNG↓
パフォーマンスや簡略化のために非正規化
確かにこれはわかるが
この変遷についていけるマッピングFWがあるのか・・・
0438デフォルトの名無しさん
NGNGその変遷どおりにマッピング変えればいいだけだよ。
ORMに幻想抱きすぎ。
SQLを変更するのと、どっちが手間がかかるか、安全か、天秤にかけて、適切な方を選べばいい。
0439431
NGNGそうでもないと思うよ。非正規化が絶対に必要なのは一般に思われてるほど
多くないと思ってるから、むしろORMの機能をフルに使う事を前提にして
設計した方が綺麗に無駄なく作れるような気がする。
ERD上の関係より、コレクションの関係の方が詳細に限定されてるし。
あるべき姿の論理設計って、実際はかなり大雑把なもので、最低限必要な
属性しか持っていない概念的なテーブル構成にして、極端に詳細な要件は
省いて設計して、物理設計の時点で反映させるくらいでいいのかも。
パフォーマンスの点だと、単に結合するテーブルを減らす目的の非正規化って
無駄(マスタとの結合)を減らす程度の効果しかなくて、日次や月次バッチなりで
集計結果を先に計算して誤魔化す方が劇的な速度向上が得られると思う。
それには非リアルタイムになるってデメリットも出てくるけど。
チューニングって言っても、結局、「誤魔化す>>>無駄を減らす」なわけで。
0440デフォルトの名無しさん
NGNG0441デフォルトの名無しさん
NGNG0442デフォルトの名無しさん
NGNGマジレスすると、そいつらには
「『正規化』という概念そのものが無い」
のですよ。
もちろん、オブジェクト指向とか、RDBとか、
そーゆー概念も無い。
【大型汎用機】とか【コピー句】とか、
そういった世界の人々が、ORマッピングの世界に流れてきて
カオスを生み出しているのが現状。
0443デフォルトの名無しさん
NGNGどんどんシンプル化されて、
[RDBMS] ⇔ [必要なSQL投げ投げロジック。SQLは手書き] ⇔ [オブジェクト]
に収束する希ガス。。。
0444431
NGNGそれは受付キュー ⇒ 揃ったところで定時処理みたいな奴でしょ?
最初から処理可能時間が限定されてるようなのはまた別の話。
ただね、何でもかんでもバッチでって発想の奴多いからさ。
一度その前の綺麗な姿で設計すべきだろって言いたいんだよ。
パフォーマンスに関してのチューニングだと、
1) 無駄を減らす ⇒ インデックスの有効利用やプロシージャ化など
2) 誤魔化し ⇒ 時間かかる計算を先にして計算結果のみ利用など
この2種類のどっちかになると思ってるんだけど、どうよ?
>>443
現状でORMだけで完結できないのは同意。EJBQLもHQLも
貧弱だし、そのへんも結局SQLのラッピングだし。
0445デフォルトの名無しさん
NGNG要件定義の段階で業務のすべてを吸い出すことは出来ない
ようやく決まったと思ったら、他の担当の奴(顧客側)が突然首突っ込んできて
「ああ、それは違うよ 今はそう言うやり方ではない」と、打ち合わせている業務担当者でさえ知らない新事実が発覚する
ほんと糞プロジェクトだよ
0446デフォルトの名無しさん
NGNG> 2) 誤魔化し ⇒ 時間かかる計算を先にして計算結果のみ利用など
こういうのを「誤魔化し」というのは、処理の時間方向での分散という考え方がしっかりできてないという証拠だと思ってしまうんだけど・・・
0447デフォルトの名無しさん
NGNG0448431
NGNGふーん。
じゃあ、事前集計の結果と、リアルタイム集計が同一だというの?
要件的に同一とみなして構わないってだけの話だと思うんだが。
近似値しか得られないのであれば、データ的に誤魔化してるじゃん。
0449デフォルトの名無しさん
NGNG近似値を得ることを誤魔化しというのも、数とか計算についての考え方がしっかりできてない証拠だと思ってしまうんだけど・・・
0450デフォルトの名無しさん
NGNG0451デフォルトの名無しさん
NGNGいくらでも同一にできると思うのだが。
0452デフォルトの名無しさん
NGNG事前集計の結果を上書きするようにします。
というような改竄系の仕様の乱発を求める顧客の要望には
正直ついていけないというか罪の意識さえ感じてたりします。
0453デフォルトの名無しさん
NGNGなしで何をやれと。
0454デフォルトの名無しさん
NGNG0455デフォルトの名無しさん
NGNGそこでiBATISですよ。
>>445
そこでアジャイルですよ。
ttp://capsctrl.que.jp/kdmsnr/wiki/bliki/?ScopeLimbering
ttp://capsctrl.que.jp/kdmsnr/wiki/bliki/?FixedScopeMirage
0456デフォルトの名無しさん
NGNG0457デフォルトの名無しさん
NGNGSQLガリゴリ書いて、Map配列
コレ最強
0458デフォルトの名無しさん
NGNGま、Hibernateはその分、バイトコード弄りしてくれるわけだが。
iBatisのSQLMapはCommons DBUtilsまんまでぱくりやろ。
0459デフォルトの名無しさん
05/01/21 00:00:220460デフォルトの名無しさん
05/01/21 00:28:00なんかほとんど紹介だけって感じだったけどさ...
0461デフォルトの名無しさん
05/01/23 01:29:15見てきたけど、ほんとに紹介だけって感じだった。
導入とGUIを使ってのマッピングと、簡単なデータ操作の方法という感じ。
Cayenneは、なかなかその次のフェーズの記事がでないな。。
0462デフォルトの名無しさん
05/01/23 05:32:44結局Toplinkが一番いいという話になっててちょっと笑った。
0463デフォルトの名無しさん
05/01/28 01:27:580464デフォルトの名無しさん
05/01/30 18:22:060465デフォルトの名無しさん
05/02/06 01:30:320466デフォルトの名無しさん
05/02/06 02:14:240467デフォルトの名無しさん
05/02/06 12:42:240468デフォルトの名無しさん
05/02/06 14:08:320469デフォルトの名無しさん
05/02/06 17:42:06そんなあなたにiBatis
0470デフォルトの名無しさん
05/02/07 10:38:280471デフォルトの名無しさん
05/02/07 10:48:19イーバティス?
0472デフォルトの名無しさん
05/02/07 13:27:430473デフォルトの名無しさん
05/02/07 22:36:17雑誌で簡単な記事とかならあったけど、ネット上で日本語情報はほとんど皆無。
英語だけど、ここのSQL Maps Tutorial見ると、こんな感じかあってのが分かる。
http://www.ibatis.com/common/download.html
0474デフォルトの名無しさん
05/02/08 01:22:31ttp://www.onjava.com/pub/a/onjava/2005/02/02/sqlmaps.html
とはいえ、本家のチュートリアルで十分かな。
iBATISの売りは、シンプルなことなんだし。
0475デフォルトの名無しさん
05/02/08 22:02:13(新) hibernate.cache.provider_class net.sf.hibernate.cache.EhCacheProvider
(旧) hibernate.cache.provider_class net.sf.ehcache.hibernate.Provider
0476デフォルトの名無しさん
05/02/09 01:40:18外部参照を無意味なID値でやるってことだと、かなりDB設計技法が変わって周囲からの抵抗が予想され.....
0477デフォルトの名無しさん
05/02/09 02:39:050478デフォルトの名無しさん
05/02/09 14:49:06ありがとうございます。
見てみます。
0479デフォルトの名無しさん
05/02/10 07:45:45紐付けされた別オブジェクトの属性で
ソートすることはできますか?
.add( Expression.eq( "master.name", new String("ほげほげ"))
で、検索条件として使うのはOKなんですが、
.addOrder( Order.asc("master.name") )
としてソート条件として使おうとすると実行時に例外となって
しまいます。
0480デフォルトの名無しさん
05/02/10 19:57:37master.nameはselectしてる?
そうじゃないとだめなDBもあるよ。
>new String("ほげほげ")
なんでわざわざnewしてんの?
0481デフォルトの名無しさん
05/02/14 03:02:570482デフォルトの名無しさん
05/02/14 03:41:30とりあえず、継承のマッピングはHibernateの方が強い。
0483デフォルトの名無しさん
05/02/14 23:33:16joined-subclassでマッピングしてるとそのぶんleft joinするからMySQLつかうと結構問題。
0484デフォルトの名無しさん
05/02/15 00:12:300485デフォルトの名無しさん
05/02/15 00:54:17ttp://objectstyle.org/cayenne/release-notes/RELEASE-NOTES-1.2M2.txt
0486デフォルトの名無しさん
05/02/15 02:15:29しかし一番継承のマッピングするのはキモの部分だったりする
0487デフォルトの名無しさん
05/02/15 10:30:52日本語のシンタックスエラー。"一番"の辺りに。
クエリーを投げなおしてください。
0488デフォルトの名無しさん
05/02/18 14:18:15ttp://hp.vector.co.jp/authors/VA027994/blanco/blancodb.html
国産みたい?
0489デフォルトの名無しさん
05/02/19 22:07:590490デフォルトの名無しさん
05/02/19 23:04:53Bean 使ってる場合のリフレクション除けば、JDBC 直と変わらんだろ。
おまいの SQL が悪いか、コネクションプールしてないかだろ。
0491デフォルトの名無しさん
05/02/19 23:39:49一回のSQLで大量のデータを取得するときは、
遅いんじゃないの??
0492デフォルトの名無しさん
05/02/20 00:21:34大量のデータをfetchした時は、そのデータをHDDから読み出したり、ネットワーク経由で送る時間の方がずっと大きいので、dbutilのオーバーヘッドなんか全然関係なくなるのでは。
0493デフォルトの名無しさん
05/02/20 01:28:46されてまう。つくりの問題。
0494デフォルトの名無しさん
05/02/20 01:42:08Listじゃなくてiteretorで返すやつ低レベルAPIじゃなくてもう一皮ラップしたやつ用意してくれればいいのにね。
あと動的SQL対応。
0495デフォルトの名無しさん
05/02/20 12:42:23のが一番の問題かな。Cayenneはこの辺どうなのかなー。
Hibernate3が待ち遠しい。
0496デフォルトの名無しさん
05/02/20 17:20:51それはJavaの言語仕様の問題なので、Hibernateのone-to-oneは使わず、one-to-manyで実装しておいて、one-to-oneなプロパティを自分で作る。
List getDatas()
でone-to-manyにして
Object getData(){
if(getDatas().size() == 0) return null;
return getDatas().get(0);
}
というone-to-oneエミュレーションなプロパティを作る。
0497デフォルトの名無しさん
05/02/21 22:07:00dataは複数形。単数形はdatum。
以上、トリビアでした。
0498デフォルトの名無しさん
05/02/21 22:29:50以上、トリビアでした。
0499デフォルトの名無しさん
05/02/22 20:36:17以上、オリビアでした。
0500デフォルトの名無しさん
05/02/22 22:16:07以上、オレオレでした。
0501デフォルトの名無しさん
05/02/23 09:17:24でもそれは健康を害するトランス脂肪を含んでいて、
カリフォルニア州では、子供に食べさせることを全面的に禁じる訴訟が起きちゃったんですね。
以上、オレオでした。
0502デフォルトの名無しさん
05/02/23 10:09:350503デフォルトの名無しさん
05/02/23 19:41:44外のクッキー自体は大丈夫だよね
知るかよ
0504デフォルトの名無しさん
05/02/25 14:50:00にもあるかと思うんですが、Hibernateって、複合キーを扱えないって聞いたんですけど
本当ですか?
例えば、下のような会社、部署、従業員って3つのテーブルの関連はうまく扱えないのでせうか?
会社
PK:comp_id
部署
PK:comp_id, dept_id
従業員
PK:comp_id, dept_id, person_id
「うまく扱う」っていうのが抽象的で申し訳ないんですけど。
0505デフォルトの名無しさん
05/02/25 15:34:250506デフォルトの名無しさん
05/02/25 23:16:43うそです。
ところで、複合キーってなんかメリットあるの?
0507デフォルトの名無しさん
05/02/26 01:35:20いる。
そういう現実がある以上、HibernateなりなんなりのORマッピングツールが
現実にマッチしていないとしたら問題だと思うね。こっちがいくら、PKにはPK用に
項目を設けてくれといったところで、現実にマッチしてない段階で「つかえねえ
ツールだな」と解釈されてしまう。
そういうのって勿体ないよね。HibernateもCayenneもEOFも複合キーから遠ざか
ろうとするのは良いんだが、現実問題を解決してくれ、という気持ちにもなるわな。
0508デフォルトの名無しさん
05/02/26 03:50:40やるなら新規。
0509デフォルトの名無しさん
05/02/26 07:34:26現実問題として、DB屋に複合プライマリキーに慣れ親しんでいる人がいっぱいいても、コーディングが面倒になるからやめて欲しいのは確か。
そういう現実がある以上、DB屋が現実にマッチしていないとしたら問題だと思うね。
DB屋がいくら、PKを含んだ複合キー項目を設けてくれといったところで、現実にマッチしてない段階で「つかえねえDB屋だな」と解釈されてしまう。
そういうのって勿体ないよね。DB屋も複合キーで美しい設計にしようとするのは良いんだが、現実問題を解決してくれ、という気持ちにもなるわな。
0510DB屋
05/02/26 12:20:24あほか、大規模システムのコアは DB だ。
基幹システムのような場合、DB には Java だけでなく .net や COBOL
などからもアクセスされる。Java はただの数あるクライアントの 1 つに過ぎない。
そんな中、1 言語の中のたかが 1 ライブラリの都合なんか知るか。
思い上がりも程々にな。
あと、DB アクセスロジックを Java の中に持つなバカ。
共通化って Java の中の狭い中しか見てないだろ。
ストアドにして、どの言語からでも使えるようにしろ。
Java だけを見ていたい気持ちは分かるが。
まー、Java しか知らん香具師ほど、この気持ちは強いだろな。
0511デフォルトの名無しさん
05/02/26 13:53:000512デフォルトの名無しさん
05/02/26 14:44:42ライブラリの都合の問題とかじゃなくて、そもそもそういう設計が良い設計だとは
思えんのだが…って板違いだな
0513デフォルトの名無しさん
05/02/26 14:53:38509の言う「現実」ってのは「マッピングツールが対応してない」「コーディング
が面倒」ってこと? 複合キーがシステム的におかしいというならわからんでも
ないけど、コーディングの都合で設計を変えてくれってのは理解しがたい。
まぁ、複合キーの是非に関してはおいといて、システム組む時にはやっぱり
DBありきだと思うよ。
なお、個人的には複合キーは嫌いではないし、ストアドはあまり好きでない。
0514デフォルトの名無しさん
05/02/26 15:00:53複合キーのメリットってなに?
メリットにくらべてデメリットが大きいなら、設計を変えるべきだとは思う。
デメリットとしては、SQLが長くなることやら、ORマッピングに限らずプログラム上でいろんな仕組みが使いにくくなることやらあげれるんだけど。
メリットってなに?デメリットをうわまわるメリットがあるなら、考えを改める。
ところで、Hibernateで複合キーが使えないって、どういうこと?
とりあえずは使えるよね?
0515デフォルトの名無しさん
05/02/26 15:03:30それなら、いっそう、いろいろな環境から使いやすい単純なキーにしておいたほうがいいと思うが。
VBのコンポーネントでも、複合キーと相性が悪いものはあるわけだし。
Delphiのコンポーネントは複合キーだと使いにくかったし。
0516デフォルトの名無しさん
05/02/26 18:03:43あるシステムではキーになってても連携する隣のシステムじゃその値を変更したいなんてことは良くあると思うし。
まあ、スレ違いだな。
0517デフォルトの名無しさん
05/02/26 18:33:44ER図上でカーディナリティも理解できることから、自然キーがいいという意見はもっともだ。
実際、自然キーで設計されたテーブル群のほうが多いだろう。
しかしより基本的なレベルに「キー値は不変の情報を用いる」という原則がある。
最初の設計時には不変に思えた自然キーが、機能追加時に変更の必要が出てくることがある。
これは自然キーの変更を迫るような設計変更が悪いのではなく、
ビジネスの変更に応じてキーを変えられない当初の設計が間違っている。
>>510の考えには全面的に同意する。
異なる環境、言語からのアクセスも並列に存在することは当然想定すべきだし、
ストアドプロシージャというデータベースアクセスの抽象化手段も使わない手はない。
(パフォーマンス向上という副作用までついてくるんだし)
その上で、キーには代理キーを使うべきだ。
0518デフォルトの名無しさん
05/02/26 21:04:470519デフォルトの名無しさん
05/02/26 21:06:030520518
05/02/27 00:09:20対して問題になってないんだけど、次期システム開発なんかに巻き込まれて
「DBが変わります」とか言われた時に、同じDBならストアドが流用できるのに
とか考えてしまう。
まあ結局はシステムが変わってるのでストアドも作り直しになっちゃったりもする
んだけどなw
0521デフォルトの名無しさん
05/02/27 01:16:00> 共通化って Java の中の狭い中しか見てないだろ。
> ストアドにして、どの言語からでも使えるようにしろ。
当面Javaでやって、もし他から必要ならWebサービスで呼び出せば充分かと。
必要かどうかもわからない共通化のために、開発環境の充分に整いにくいストアドでやる必要はなさげ。
0522デフォルトの名無しさん
05/02/27 01:35:11なるほど、Web サービスなら .net で組みやすいな。Java を使う必要もない。
で、COBOL から Web サービスの呼び出しって実績あんのか?
HTTP でパフォーマンス落としてまで Web サービスっていいか?
0523デフォルトの名無しさん
05/02/27 02:20:20えっと、必要かどうかわからない共通化にコストかけるよりはいいと思う。
0524デフォルトの名無しさん
05/02/27 02:22:410525デフォルトの名無しさん
05/02/27 02:59:00共通化すること。DBが他メーカーのものに変わっても、そのまま動いてくれる。
一方でストアドプロシージャは、ちゃんと作ればとにかく速い。いろんなテーブルのいろんな
ところをちょっとずつ更新、なんて処理もそつなく高速にこなしてくれる。
実際DB・APPサーバの通信がボトルネックになる事もあるから、その辺も考慮すると、
全部が全部ORマッピングというのも考えものだよな。
まあCayenneやEOFの吐き出すダサいSQLを許容してる俺がいうのもなんなのだけど...
0526デフォルトの名無しさん
05/02/27 03:16:370527504
05/02/28 09:05:24なんかレスがいっぱいあって個別にレスできないのは申し訳ないんですけど・・・
みなさんありがとう。
で、Hibernateの話ではなくなってしまってスレ違いな話題ではあるんですが、
ちょっとマジレスきぼん。
>>504
で出したテーブルは複合プライマリキーだから設計がよくないって意見が大半のような
気がするんですけど、複合プライマリキーを使わないでテーブル設計する場合って↓
みたいなのでいいんですか?
会社
PK:comp_id
部署
PK:dept_idとPKじゃない:comp_id
従業員
PK:person_idとPKじゃない:comp_id, dept_id
それとも、まったく別の形?
自分でDB設計することってほとんどないんだけど、こんな形のテーブルばっかり
扱ってきたので、普通なんだと思ってました。
識者の方、お願いします。
0528504
05/02/28 09:34:22この形(複合キー)のテーブルで違和感がなかったのは
・複合キーすべてを指定してSELECTしたら、存在してれば、戻ってくるのは必ず1行
・同じ値(例えば従業員)のレコードを挿入しようとしてもDBではじいてくれる。
っていうメリットがあるような気がするんですけど。どうですか?
0529デフォルトの名無しさん
05/02/28 11:01:59> ・複合キーすべてを指定してSELECTしたら、存在してれば、戻ってくるのは必ず1行
複合キーにしなければ、1つのキーだけでも指定できる。
複合部分は主キーではないインデックスにすれば同じことが出来る
> ・同じ値(例えば従業員)のレコードを挿入しようとしてもDBではじいてくれる。
主キーにしなくてもできる
レコードを特定するのに複数の値が必要になることのデメリットの方が多いと思う。
このポリシーだと、関連するたびにキーが増えていく。
たとえば、売上に担当した従業員を保持しようと思うと、会社と部署のコードを持つ必要がある。
会社は部署からたどれるので、わざわざ従業員に持つ必要がない。
部署は従業員からたどれるので、わざわざ売上に持つ必要がない。
0530デフォルトの名無しさん
05/02/28 11:54:42レスありがとう。
理解が足りなかったらごめんなさい。
>複合キーにしなければ、1つのキーだけでも指定できる。
>複合部分は主キーではないインデックスにすれば同じことが出来る
>主キーにしなくてもできる
と、いうことは極端に書くと以下のような設計がよいということなんですかね?
従業員
PK:代理キー+重複なしの複合インデックス(person_id, dept_id, company_id)
なんか、勘違いしていたような気がするんですが、設計上よくないのは、
複合「プライマリキー」で、キーは代理キーにして、
複合キーでやりたかったことは他の列で複合インデックスはってやれって感じなんでしょうか?
>レコードを特定するのに複数の値が必要になることのデメリットの方が多いと思う。
>このポリシーだと、関連するたびにキーが増えていく。
はい。そう思います。
と、いうことで、まとめると↓でFA?
会社
PK:comp_id
部署
PK:代理キー+重複なし複合インデックス(dept_id,comp_id)
従業員
PK:代理キー+重複なし複合インデックス(person_id, dept_id)
0531デフォルトの名無しさん
05/02/28 12:22:50dept_id が会社内で一意で、person_id が部署内で一意だとすると、
従業員テーブルのインデックスは、(person_id, dept_id, comp_id) になるんじゃない?
結局従業員テーブルに関連テーブルのキーを入れことになるので、
俺はこういう場合は複合キーにしたいんだが……。
代理キーを使う利点って、社員を外部キーに持つテーブルのカラムが
無駄に増えなくて済むって点があると思うけど、Hibernate はこういう複数のカラムを
キー用のクラスに隠蔽してくれるんじゃなかったっけ?
ただ、そのキー用のクラスを使うのがけっこう煩わしかったような気もするけど。
Hibernate はあまり使い込んでないから外してたらすまん。
0532デフォルトの名無しさん
05/02/28 13:01:17なのに、なぜかHibernateで複合キーが使えないような感じで議論が展開してる。
Hibernateじゃなくても、複合キー使うのはだいたいわずらわしい。
0533デフォルトの名無しさん
05/02/28 13:02:360534age
05/02/28 13:35:33>Hibernateじゃなくても、複合キー使うのはだいたいわずらわしい
って、どういうこと?
0535504 = 530です
05/02/28 14:09:57>>531
>代理キーを使う利点って、社員を外部キーに持つテーブルのカラムが
>無駄に増えなくて済むって点があると思うけど、
ですね。そのとおりだとは思っているのですが・・・>>476にもあった
>外部参照を無意味なID値でやるってことだと、
>かなりDB設計技法が変わって周囲からの抵抗が予想され.....
私もなんとなく、外部参照が代理キーになるってのが気持ち悪いというかなんていうか・・・
なので、複合キーでも特に問題があるように見えませんでした。
>Hibernate はこういう複数のカラムを
>キー用のクラスに隠蔽してくれるんじゃなかったっけ?
とりあえず、複合キー自体は扱えるようなので、
これからHibernate使って勉強してみたいと思います。
>>532
>なのに、なぜかHibernateで複合キーが使えないような感じで議論が展開してる。
いえ、>>506にだれも反論していないので複合キーは扱えるという結論なんだろうと思ってました。
で、それとは別に、そもそもなぜ、複合キーか?っていう議論に発展していて、
スレ違いとはわかりつつ、続けさせてもらってました。
で、大半の意見としては、>>532のように
・複合キー使うのは(DBのクライアント側からすると)だいたいわずらわしい。
というところなんでしょうか?
0536デフォルトの名無しさん
05/02/28 14:43:21SQL直書きなら連結のための条件が増えて面倒だし、OCXやVCLのコンポーネントなんかでも複合キーになると不便だったりする。
0537デフォルトの名無しさん
05/02/28 14:47:12逆にオレの場合、なんならOIDがキーでもかまわないくらい、実際に必要な値をキーにしたくない。
OIDだとはげしくDB依存するから、シリアル値をキーにするけど。
0538デフォルトの名無しさん
05/03/02 00:26:40ttp://blog.hibernate.org/cgi-bin/blosxom.cgi/2005/02/28#3announce
ttp://www.hibernate.org/Download/DownloadOverview
0539デフォルトの名無しさん
05/03/04 10:34:57できるライブラリってないいんですか?
0540デフォルトの名無しさん
05/03/04 11:11:51C++はわからんけど、.NETでORマッピング使いたいなら、
NHibernateとかいうものがあるぞ。
あとはC++のスレへ逝け
0541デフォルトの名無しさん
05/03/05 14:14:41既存のテーブルに対してJavaクラスを自動生成したい場合って
そこでXDoclet使う意味は無いですかな?
オープンソースJavaプロダクツという本には
既存のテーブルからJavaクラスを自動生成する方法が
のっておらずXDocletタグつきのJavaソースコードから
テーブルを自動生成する方法しか乗ってなかった orz
なんかええサンプルない?
それより、XDoclet2 + Maven2マダー?
0542デフォルトの名無しさん
05/03/05 14:24:38遊んでてぜんぜん生産性が上がってないんだよな
0543デフォルトの名無しさん
05/03/05 15:25:59使う意味あると思うよ。
クラス+hbm.xml書く手間と、クラス+XDocletタグ書く手間じゃ
大差ないし、マッピング情報をひとつのファイルに集約できる。
サンプルはmiddlegenでぐぐれば見つかるっしょ。
ただし、結構間違えたの吐くので要注意。
0544デフォルトの名無しさん
05/03/05 19:50:10まとめて一つのコレクションにつっこんでから、プログラム内で仕分けをするほうが
一般的ですか?
where属性の中にHQL識別子が使えれば迷わずwhere属性を使うのですが...
0545デフォルトの名無しさん
05/03/05 21:27:000547デフォルトの名無しさん
05/03/07 01:56:03「Javaにかじりつく」の意味がわからないが
2chで見た憶測かな?
Javaを初めて使った頃に比べれば生産性は大幅にあがってるよ。
HibernateやCayenneは明らかに生産性を上げるものだね。
JDBCでSQL文をベタ書きするよりは明らかに
でっかい生産性を上げているね。
べた書きするとテーブル仕様変更したとき厄介だしね。
カラムを追加したときも面倒くさいし。
0549デフォルトの名無しさん
05/03/08 11:09:48M$信者じゃねーの?
0550デフォルトの名無しさん
05/03/08 13:07:35いまだにWindowsにかじりついてるやつっていつまで経ってもツールとかでシコシコ
遊んでてぜんぜん生産性が上がってないんだよな
0551デフォルトの名無しさん
05/03/08 14:00:43という印象を受ける。
実際には、その後それについて学ばないどころか触りもしないわけだが、その
状態で暫く時間が経過すると、何時の間にか「俺にもできそうだ」が「俺にもで
きる」に印象が化けてたりする。
.NET=簡単という立場でJavaを否定してる奴の相当数はこの手の類。
0552デフォルトの名無しさん
05/03/09 02:18:25ドトネトの考え方は
基本的に「横着」「安直」だからね。
ドトネトは合成着色料たっぷりのお菓子で子供を騙している
戦術に似ているもんね。
0553デフォルトの名無しさん
05/03/09 10:34:07スレタイも読めない厨房にそれは無理だろうけど。
0554デフォルトの名無しさん
05/03/11 22:55:380555デフォルトの名無しさん
05/03/12 09:19:45前方一致とかのSQLを書くだけ
0556デフォルトの名無しさん
05/03/12 11:41:54レスサンクス
でも、答えになってねーよ
select * from xxx where MojiRetsu like #hoge#
といったSQLの場合、
select * from xxx where MojiRetsu like #hoge#%
って訳にはいかないよね?
プロパティ#hoge#の値として%を付加した値を渡さないとできないってことでFA?
0557デフォルトの名無しさん
05/03/12 12:33:10そだね。チュートリアルにも特に記述はないけど、次のようなソース部分があった。
<isNotNull prepend="AND" property="emailAddress">
ACC_EMAIL like #emailAddress#
</isNotNull>
0558デフォルトの名無しさん
05/03/12 12:36:39やっぱその方法か。
ありがとう。
0559デフォルトの名無しさん
05/03/12 18:05:36col like #hoge# || '%'
じゃあかんのか?
0560デフォルトの名無しさん
05/03/12 20:41:56できるかな?
0561デフォルトの名無しさん
05/03/12 20:44:240562デフォルトの名無しさん
05/03/12 20:50:270563デフォルトの名無しさん
05/03/12 23:47:190564デフォルトの名無しさん
05/03/13 00:15:440565デフォルトの名無しさん
05/03/15 00:15:23(゚∀゚)ラヴィ!!
0566デフォルトの名無しさん
05/03/16 23:41:59ttp://www.objectstyle.org/cayenne/
0567デフォルトの名無しさん
2005/03/21(月) 13:04:47どのようにマッピングすればよいのでしょうか?
例えば、
TBL_AにID,NAMEというカラムがあって、
TBL_AのIDを2つ持った、JOIN_Aを作るにはどうすれば良いのでしょうか?
0568デフォルトの名無しさん
2005/03/22(火) 21:06:10それはmany-to-manyとは呼ばないような・・・。
many-to-one×2(JOIN_A)とone-to-many×2(TBL_A)じゃね?
0569デフォルトの名無しさん
2005/03/24(木) 13:17:45from TABLE table group by table.id order by sum(table.num)
というようなHQLを実行したい時はどうすればいいのでしょうか?
0570デフォルトの名無しさん
2005/03/29(火) 19:53:55ID:select date(T.d) from hoge T
とすると、undefined alias: date
と出るのですが、SQLの関数を使用するには
どうすればいいのでしょうか。
データベースはPostgreSQLです。
0571デフォルトの名無しさん
NGNG0572デフォルトの名無しさん
2005/04/03(日) 00:07:28どなたか解決方法ご存知のかたっていmすでしょうか?
0573デフォルトの名無しさん
2005/04/04(月) 20:32:00hibernateは柔軟性無さ杉。
そういうクエリーには対応できないぞ。
素直にJDBCかDbUtils使え。
0574デフォルトの名無しさん
2005/04/04(月) 20:35:23それもできないよ。
one-to-oneでもone-to-manyでもそうだけど、リレーションしたい場合は
単一キー同士にしないとできんぞ。
でも、リレーション無くてもいいなら複合キーのマッピングできるという、わけわかんねぇ仕様。
オレもこれで悩んだんだけど、結局テーブル設計し直すことになった。
0575デフォルトの名無しさん
2005/04/04(月) 20:42:28メンバーに追加できる仕様だったらよかったんだけど、
hbm2java.xmlを再実行すると上書きされちゃうし、かといって、hibernateが吐き出した
クラスを継承してメンバー追加したクラスを実行時に渡すとエラーになるんだよなぁ。
0576デフォルトの名無しさん
2005/04/04(月) 21:47:35すみませんおしえてください。
いままで何度かこのスレでも、Hibernateと複合キーの話題が出てましたが、結局
Hibernateで複合キーってのが現実的に使えるのかどうか分からずじまいだったのですが、
つまり、Hibernateでは、単一テーブルからデータを取ってくるだけなら複合キーでも
問題ないけど、リレーションを使おうとすると複合キーは使えないということなんでしょうか?
0577デフォルトの名無しさん
2005/04/04(月) 22:09:54>つまり、Hibernateでは、単一テーブルからデータを取ってくるだけなら複合キーでも
>問題ないけど、リレーションを使おうとすると複合キーは使えないということなんでしょうか?
そう。取ってくるだけなんて現実的にありえないから、全テーブル単一キーで設計するしかない。
この時点でかなり萎える。。
反論はあるだろうが、あいにくオレはDB屋なので。。スマソ。
ORマッピー自体は賛成だが、現時点でのhibernateは使いづらいだけ。
Toque+DbUtilsの方が使いやすいし、柔軟性もあるので、オススメする。
0578デフォルトの名無しさん
2005/04/04(月) 22:11:59> この時点でかなり萎える。。
ここと
> あいにくオレはDB屋なので。
ここのつながりがよくわからんのだが、そういうもんなの?
0579デフォルトの名無しさん
2005/04/04(月) 22:18:31そういう場合でも単一キーを強制される。
たかが1ライブラリの都合でテーブル設計の選択肢が狭められるのがイヤなんだよ。
0580デフォルトの名無しさん
2005/04/04(月) 23:09:260581デフォルトの名無しさん
2005/04/04(月) 23:38:17ことのほうがおおい。今までもそういうことが多かった。
複合キーの善し悪しについては議論があるだろうが、なんだかんだ言っても複合キーは、
O/Rマッパーに比べて歴史の長いRDBMSではメジャーな手法で、DB屋はほぼ確実に複合キーを
使ってくる。
それを無視して「複合キーなんて旧世代の習慣だ。これからは代理キーだ」といったところで、
世の中が追いついてないんだからしょうがない。そんな世の中でHibernateが複合キーに
対応してないというだけで「DB構成変えるわけにはいかんので採用できんね」とかなってしまう
のは、実情にあわせてないツールの方に問題があると思うな。
最もこれは、Hibernateに限らず、Cayenneはもちろん、EOFですらそうなんだけど。
iBatisはSQLマッパーなんでなんとかなりそうだけど。
0582デフォルトの名無しさん
2005/04/04(月) 23:51:46それよかhibernateで困るのは、生成されたPOJOにListとか勝手に追加できないこと。
0583デフォルトの名無しさん
2005/04/05(火) 04:02:440584デフォルトの名無しさん
2005/04/05(火) 04:06:24そうか?Middlegenの制約じゃねえの?
0585デフォルトの名無しさん
2005/04/05(火) 04:07:540586デフォルトの名無しさん
2005/04/05(火) 06:07:42例えば、EmpテーブルをマッピングしたEmpクラスがあったとして、
以下のような取得方法になるよね。
List list = session.createCriteria(Emp.class).list();
そこで、EmpにListとかMapとか追加したMyEmpをEmpクラスを継承して作って
List list = session.createCriteria(MyEmp.class).list();
ってやると、hibernateでエラーになるのよ。
これってジェネレーションギャップパターンで解決できるものなの?
0587デフォルトの名無しさん
2005/04/05(火) 08:36:01そのMyEmpはどういうマッピング定義にしてるの?
0588デフォルトの名無しさん
2005/04/05(火) 09:49:52generation gap パターンが使えるなら知りたい。
今は、パッチのカタチで保存することでなんとかやってるけど、めんどくさい。。。
0589デフォルトの名無しさん
2005/04/05(火) 10:56:50カラムの変更があったときにはhbm.xml直書き。
0590588
2005/04/05(火) 14:22:59hbm.xml にも一応、CDATAでコードかけるんですけどね。
エディットがしづらいので・・・
0591デフォルトの名無しさん
2005/04/05(火) 18:19:00どっかに変更点まとめたサイトとかありませんか?
0592デフォルトの名無しさん
2005/04/05(火) 22:06:270593デフォルトの名無しさん
2005/04/05(火) 22:07:29ドキュメントに書いてあったような気がするが。
0594デフォルトの名無しさん
2005/04/07(木) 09:07:020595デフォルトの名無しさん
2005/04/07(木) 11:00:520596デフォルトの名無しさん
2005/04/11(月) 22:10:20同じ例でいうんであれば、
session.save((Emp)myEmpObj);
ってやると、
net.sf.hibernate.MappingException: Unknown entity class
になっちゃうんですけど。
結局これってできないんですか?それともhbmでなんとかなるの?
0597デフォルトの名無しさん
2005/04/11(月) 22:16:27MyEmpのインスタンスを保存したいときはEmpだけじゃなく
ちゃんとMyEmpについても書かないといけないぞ。
0598デフォルトの名無しさん
2005/04/11(月) 22:21:34おぉ、サンクス。
>MyEmpのインスタンスを保存したいときはEmpだけじゃなく
>ちゃんとMyEmpについても書かないといけないぞ。
ってことは、
Emp = empテーブルのマッピング以外に、
MyEmp = empテーブルのマッピングを書くってことかしらん?
すまんが、どうやって書くのか例を示してもらえないだろうか?もしくは、ココみろ(URL)!でもいいので。
おながい。
0599デフォルトの名無しさん
2005/04/11(月) 23:01:27とりあえず、自分でやってみた。
MyEmpのDocletで、親クラスと同じテーブルを指定してやったら、hbmのファイルができました。
DBへのアクセスもOKでした。
/**
*@hibernate.class table="emp"
*/
public class MyEmp extends Emp {
}
で、一つだけ気になるんですけど、一つのテーブルに対して、複数のマッピングってOKなんですかね?
(この場合だと、Empと、MyEmp)
インスタンスキャッシュとかしないんでしたっけ?
0600デフォルトの名無しさん
2005/04/11(月) 23:10:49継承を使うなら、ちゃんと継承のマッピングをしないといけない。
Strategy of inheritとかそんなところで解説されてる。
継承のマッピングについては、過去レスにもある気がする。
0601デフォルトの名無しさん
2005/04/13(水) 13:25:311:DBを先に設計・実装してからそれをマッピングするJavaコードを起こす
2:Javaコードから、XDocletなどで対応するDB構造のSQLを生成しDB実装
という2つのアプローチがあると思うんだけど、
特に後者はメリットあるかな?
インピーダンスミスマッチが防げる気はするけど、DBは単なる箱になりそうな気もする。
0602デフォルトの名無しさん
2005/04/13(水) 15:11:520603デフォルトの名無しさん
2005/04/13(水) 15:30:280604デフォルトの名無しさん
2005/04/13(水) 16:41:130605デフォルトの名無しさん
2005/04/13(水) 22:58:32Rが先にあって、でもOではこういう構成になってた方が使いやすい
というのがその次にきて、リレーション関係で解決できる部分は
ORマッピングで対応して、リレーションだけではどうにもならない、
複数のエンティティが絡み合っているようなものはドメインモデルで
解決、という感じかな。
0606デフォルトの名無しさん
2005/04/14(木) 02:53:43オブジェクトをそのままRDBに突っ込めますよと。
実際には、RDBの制約やら設計のやりやすさの方が強かった。
0607デフォルトの名無しさん
2005/04/18(月) 11:07:58というか、複数データベースに対応してるORマッピングってあるのかな?
0608デフォルトの名無しさん
2005/04/18(月) 13:05:420609デフォルトの名無しさん
2005/04/18(月) 20:53:07まあ構造がEOFと一緒だし。
0610デフォルトの名無しさん
2005/04/28(木) 16:54:22Criteria.list() で取った List を DeapCopy せずに上手いこと typesafe な
別変数に入れたり戻り値として返す方法ないでしょうか?
キャストしただけだと警告出ますし。
具体的には、↓みたいな。
Criteria criteria = session.createCriteria(Hoge.class) ;
List<Hoge> hogeList = criteria.list() ; // ここで警告が出ます
return hogeList ; // List<Hoge>を返したい
なんか、OR固有の話題ではないような気もしますが。。。
0611610
2005/04/28(木) 16:55:400612デフォルトの名無しさん
2005/04/28(木) 21:56:19キャストできんの?
0613デフォルトの名無しさん
2005/04/29(金) 01:39:04>>612
キャストはできるだろうがコンパイル時にチェックできないよという旨の警告が出るはず。
0614デフォルトの名無しさん
2005/04/30(土) 12:57:19参照系はHQLではなく、SQLに近い形で作ることが
createSQLQuery("SQL文");できます。
更新系(update,delete,insert)はSQLできますか?
用途は、たとえば、1万件のデータを一括して変更・削除する場合などです。
よろしくお願いします。
0615デフォルトの名無しさん
2005/04/30(土) 16:46:460616デフォルトの名無しさん
2005/04/30(土) 18:36:390617デフォルトの名無しさん
2005/05/03(火) 23:30:40色々調べたんですが、マッピング用に UserType みたいなクラスを作る必要があるみたいで。
(そうするとVARCHARにマッピングしてくれるみたいな記述はみつけました)
Enum使ってコードをシンプルにしたいのに、これじゃ本末転倒。
DBからロードしてきて String → Enum→画面(IDとかで使う)
画面からパラメータもらって String→Enum→(DB格納のために)String
あまりにもアホらしいんで、この辺りが解決するまで Enum 使うのやめようと思ってるんですが、
先輩諸氏のご意見が聞ければ嬉しいんですが。
0618デフォルトの名無しさん
2005/05/04(水) 06:56:00hibernateからconnection取得してJDBC経由で行う。
0619614
2005/05/06(金) 11:10:12ありがとうございます。
hibernateからconnectionを取得してみます。
これから調べて試行錯誤します。
0620デフォルトの名無しさん
2005/05/09(月) 16:26:22* Hibernateの外から与えるJDBCコネクションを使う.
* HibernateがDriverManagerから取得したJDBCコネクションを使う.
* HibernateがJNDI経由のDataSourceから取得したJDBCコネクションを使う.
の3つらしい。
詳しくは、このへん。
ttp://www.hibernate.org/hib_docs/reference/ja/html/session-configuration.html#configuration-userjdbc
0621デフォルトの名無しさん
2005/05/09(月) 23:27:52net.sf.hibernate.Session#connection()で取得できると思うが。
勘違いしてたらスマソ。
0622619
2005/05/12(木) 15:25:23アドバイスありがとうございます。
残念ながら取得することができませんでした。
実際のプログラムとしては、
Connection connection = <hibernateのconnection取得メソッド?>
Statement statement = connection.createStatement();
というような流れになるでしょうか?
621様の net.sf.hibernate.Session#connection()
が利用できませんでした。(#の意味を推測してみましたが、理解できず申し訳ありません。)
よろしくお願いいたします。
0623デフォルトの名無しさん
2005/05/12(木) 15:32:19チョットワラタ
0624デフォルトの名無しさん
2005/05/12(木) 16:01:47なんかほのぼのしていいな。
# は「の」もしくは「クラスの」と訳して読み替えてみるべし。
0625619 622
2005/05/12(木) 17:49:07#をのに読み替えてプログラムをつくってみました。
該当箇所でエラーが出てしまいました。(eclipse3,hibernate2)
初心者スレではないのは十分承知しておりますが、
相談できるところがないので、よろしくおねがいします。
hibernateでSQL文をつかってデータの一括更新を行いたいのです。
import net.sf.hibernate.*;
import java.sql.*;
(1)
Session session = new Session(); <--エラー:Sessionクラスは具象クラスではないとのこと。
Connection connection = session.connection();
(2)
Connection connection = Session.connection();<--エラー:メソッドconnection()はスタティックではないとのこと。
なお >58 >59も参考にしましたが同様にうまくいきません。
皆様のお力をおかしください。
0626デフォルトの名無しさん
2005/05/12(木) 18:01:10基本的なところはググるか、ドキュメント読むことをお勧めします
ttp://www.hibernate.org/hib_docs/reference/ja/html/
ttp://www.atmarkit.co.jp/fjava/rensai3/ormap05/ormap05_1.html
0627デフォルトの名無しさん
2005/05/12(木) 18:07:32ついでだから
とりあえず(1)はこれで
// セッションファクトリーの作成
SessionFactory sessionfactory = config.buildSessionFactory();
// セッションオープン
Session session = sessionfactory.openSession();
次に(2)
上で取得したsessionインスタンス使って
session.connection();
0628デフォルトの名無しさん
2005/05/12(木) 23:20:05Hibernateより前にしっかりJava自体を勉強したら?
それからでも遅くないと思うよ。
0629デフォルトの名無しさん
2005/05/13(金) 09:18:51CSVファイルをJDBCのインタフェースで読み書きできるLibがあった。ガイシュツ?
「CsvJdbc」
http://octopus.objectweb.org/doc/2.8/extras/Csvjdbc_readme.html
SourceForgeも同じプロジェクトがあったけど、最新版はObjectWebの
Octpusプロジェクトに内包されてる。
http://forge.objectweb.org/project/showfiles.php?group_id=39
ここの「octopus-3.3-1.zip」に、jarが入ってる。
けっこー便利かも。
とりあえずできることは、SELECT/INSERT/UPDATEあたりと限られてるけど。
0630625
2005/05/13(金) 15:27:22自分のjavaの知識の浅さを認識しました。
基礎をしっかり学んでみます。
0631デフォルトの名無しさん
2005/05/13(金) 15:31:070632デフォルトの名無しさん
2005/05/13(金) 19:48:45面白いな。
使わないと思うけど、いいかも。
0633デフォルトの名無しさん
2005/05/17(火) 11:11:24このクラスを見るたびに吐き気がします。
型を変えたり、列を追加したりするたびにエラーの雨嵐。
列を削除したらりざるとせっとの値がずれてエラーノアメフラシ
Hibernate使えば少しはマシになりますか?
0634デフォルトの名無しさん
2005/05/17(火) 11:25:15その前に、テストクラスを作れ
クラスを分割した方がいいのかも。
0635デフォルトの名無しさん
2005/05/17(火) 11:26:02>列を変えたり
>削除しただけで値がずれる
どれもORまっぱー以前の話じゃん。
そこら辺なんとかしなければ使っても変わらない。
0636デフォルトの名無しさん
2005/05/17(火) 11:49:06とゆー事態は多少はましになるかも知れんが
導入したら導入したで別の問題(パフォーマンスだとか)が発生してグダグダになるのが目に見える
0637デフォルトの名無しさん
2005/05/17(火) 12:01:08どのように分ければ多少マシになるのか教えていただけませんか?
今は検索も追加も更新もDBにアクセスするものは全てそのクラスに入ってます。
0638デフォルトの名無しさん
2005/05/17(火) 12:14:53どうせstaticメソッドばっかりだろ?
インスタンスメソッドだったとしても、せいぜいインスタンスフィールドはコネクションだけ、みたいな。
0639デフォルトの名無しさん
2005/05/17(火) 12:16:160640デフォルトの名無しさん
2005/05/17(火) 12:33:14ことが多いように思う。
分かってる人間が楽するツールであって、基礎がなってない人間が使っても
意味がないよ。
0641デフォルトの名無しさん
2005/05/17(火) 12:57:43そうですよね。今はプログラムやDBの質をあげることに精進します。
ガンバルゾー!
0642デフォルトの名無しさん
2005/05/17(火) 15:00:460643デフォルトの名無しさん
2005/05/17(火) 15:50:25SELECTの場合はResultSetから取得したデータをBeanに詰めて返して、
UPDATEやINSERTに関しては、SampleBeanを引数として渡し、
そのgetterを使って "INSERT sampleTable SET " + SampleBean.getXxx()
とか言って(テーブルと同様のjavaBeanを作って受け渡しをしている)やってます。
このソースを今度1歳になる姪っ子に見せたら泣いてしまうくらいで、ホントに困っています。
なんかコーディングのヒントだけでも教えていただけませんか・・・
0644デフォルトの名無しさん
2005/05/17(火) 16:46:511テーブルしか対象にしてなくて5KL?
0645デフォルトの名無しさん
2005/05/17(火) 16:51:28マスタマップも含めて20テーブルくらいです。
0646デフォルトの名無しさん
2005/05/17(火) 16:51:39CommonsのDBUtilsとか使うと少しは綺麗になるかな。
ただ、INSERTとかでBeanからの取り出しは出来なかったはず。
DBの設計に問題が無いんであれば、とりあえず
SELECT・INSERT・UPDATE単位なり、Table単位なり、
作業目的単位なりでクラスを分けてみては。
無駄なところ、共通する部分が見えてくるかもしれんので。
0647デフォルトの名無しさん
2005/05/17(火) 16:52:46まずはテーブル毎にクラスをわけろ
一つのクラスに入れとく意味がない
0648デフォルトの名無しさん
2005/05/17(火) 17:10:52あえてJavaの話題にするなら、テーブルカラム名とbeanのプロパティ名が完全一致なら
プロパティリストをとって何も考えずループとか。
完全一致じゃなくてもアノテーション使えばいいか。
もっとも>>633はそれ以前の話題と思われ。
どっかに一つのアプリが一つのクラスに入ったソフトみたいなブログを見た記憶があるが、それに近いな
0649デフォルトの名無しさん
2005/05/17(火) 17:28:29今から用途別やテーブル毎で分けてみます。
スレッド違いなのにいろいろ教えてくださってありがとうございました。
2chでこんなにやさしくしてもらえたのは初めてです。
生まれ変わったら俺もみなさんのような教える側の人間になれるようにがんばります。
0650デフォルトの名無しさん
2005/05/17(火) 17:35:07ある程度機能や目的別にクラスが整理できて、やってること同じでつまんねと思ったら
ORMに進めばいいことがあるかもよ。ガンガレ
0651デフォルトの名無しさん
2005/05/17(火) 17:43:510652デフォルトの名無しさん
2005/05/19(木) 10:37:15HQLを動的組み立てるのはどうやればいいでしょうか?
普通に文字列結合して後でパラメータ設定するとソースがかなり汚くなる手間もかかる。
あとgetNamedQueryで取ってきたものに検索条件を追加できないでしょうか?
0653デフォルトの名無しさん
2005/05/19(木) 11:39:03User -> Groupが<many-to-one>の関係にあるときに、HQLで
1."from User as u"でfindすると、Userクラスのコレクション(List)が帰ってくるんだけど
2."from User as u inner join u.fkGroup" だと、Objectのコレクションが帰ってきちゃいます。
1.のHQLだと、
"select xxx from user"と、userの検索結果に応じた複数の"select xxx from group where id=?"が
SQLとして投げられ、
2.のHQLだと
"select u.xxx, g.xxx from user as u inner join g on u.fk_group = g.id"の一発でになるんですけど。
2のHQLで、Userのコレクションが帰ってくるようにするにはどうしたらよいの?
おせーてください。
0654デフォルトの名無しさん
2005/05/19(木) 23:10:40そもそも2で帰ってくるのは (UserとGroupの配列) のリスト なのはわかってるのか?
0655デフォルトの名無しさん
2005/05/20(金) 11:48:15ありがとう。さんきゅーです。期待通り(2のHQLで、Userのコレクション取得)の動きになりました。
>そもそも2で帰ってくるのは (UserとGroupの配列) のリスト なのはわかってるのか?
はい。そのつもりです。
すみません。追加で聞きたいのですが、Session.get(User.class, id);で、やった場合
やはりSQLが2回発行されちゃうんですけど、getの場合でもjoinする方法ってありませんか?
ちなみに、2つのクラスは以下のようになってます。
class User {
String id;
Group fkGroup;
String username;
}
class Group {
String id;
String groupname;
}
0656デフォルトの名無しさん
2005/05/21(土) 00:54:18max_fetch_sizeを適当に大きくしたりする。
あるいはmany-to-oneとかの属性でouter_joinをtrueにする。
0657デフォルトの名無しさん
2005/05/22(日) 18:46:06みたいな感じで、{}で別名の定義をしていないSQLは、Hibernate2.x系でも3.x系でも、
createSQLQueryで使うことはできない。
…あってる??
0658デフォルトの名無しさん
2005/05/22(日) 20:10:200659デフォルトの名無しさん
2005/05/22(日) 20:33:110660デフォルトの名無しさん
2005/05/22(日) 21:27:08できない。
0661デフォルトの名無しさん
2005/05/22(日) 21:49:29thx!!
0662デフォルトの名無しさん
2005/05/22(日) 21:52:21ああ?!なめんなよ!
0663デフォルトの名無しさん
2005/05/23(月) 10:15:01具体的にはどんな感じなの?
0664デフォルトの名無しさん
2005/05/23(月) 10:28:16ttp://blog.hibernate.org/cgi-bin/blosxom.cgi/2004/08/23#customsql
0665デフォルトの名無しさん
2005/05/23(月) 19:09:33そんな不良みたいな口の利き方おやめなさい
0666デフォルトの名無しさん
2005/05/24(火) 00:01:00っるせぇっつってんだよ、このババァ
0667デフォルトの名無しさん
2005/05/24(火) 00:17:52立ち会ったような気分だ
0668デフォルトの名無しさん
2005/05/24(火) 00:28:18おまえ、心が不健康だな
0669デフォルトの名無しさん
2005/05/24(火) 01:38:49すまんな、665がネタをふってくれたもんでな。
0670デフォルトの名無しさん
2005/05/24(火) 01:41:29ガンヲタが不健康ってことね。
そりゃ反論出来ません。
0671デフォルトの名無しさん
2005/05/24(火) 09:04:16まだ見てないけど、生JDBC使えるのかな?
とりいそぎdクス
0672デフォルトの名無しさん
2005/05/27(金) 14:14:42構文エラーがおきてもそのSQL文を表示するにはどうすればインでしょうか
0673デフォルトの名無しさん
2005/05/28(土) 10:57:34Hibernateでお聞きしたいことがあります。
hibernate.cfg.xmlにhibernate.propertiesの
hibernate.query.substitutions toLowercase=LOWER
みたいのを設定したい場合にはどうしたらよいでしょう?
というのもDB2を使っており、Expression#iLike()を用いた場合に
DB2にはILIKEがないので、LOWERが呼ばれてしまいます。
(しかも、このLOWERはJavaのString#toLowerCace()と動きが違うのです。)
そこで、カスタムスカラーを作成し、このスカラーをhibernate.cfg.xmlに
設定したく・・・
0674デフォルトの名無しさん
2005/05/28(土) 21:42:060675デフォルトの名無しさん
2005/05/30(月) 17:48:34折れも知りたいage
0676デフォルトの名無しさん
2005/06/01(水) 23:01:48保守とパフォーマンス
0677デフォルトの名無しさん
2005/06/04(土) 12:26:18禿げしく役に立たない気がするんだが。
仕事なんで仕方なく使ってるけど。
0678デフォルトの名無しさん
2005/06/04(土) 15:39:520679デフォルトの名無しさん
2005/06/05(日) 04:37:06止まってる理由が理由だけにしょうがないけど。
0680デフォルトの名無しさん
2005/06/05(日) 11:39:180681デフォルトの名無しさん
2005/06/05(日) 12:48:380682デフォルトの名無しさん
2005/06/05(日) 13:20:08ObjectとRDBのギャップを減らすんじゃねーのかよ。
SQLは隠すけどテーブル隠さないなら
頭隠してチンコ丸出しじゃねーか。
0683デフォルトの名無しさん
2005/06/05(日) 13:53:35欠かせないよ。
とりあえず決まりきったコーディングを一律に自動生成する
ことによってエンバグを防ごう、って感じじゃない?
0684デフォルトの名無しさん
2005/06/05(日) 13:56:42寄贈されたんだっけ? これにTorqueまで
あったら多すぎ
0685デフォルトの名無しさん
2005/06/05(日) 15:53:38チンコ重要。
0686デフォルトの名無しさん
2005/06/05(日) 16:39:35いや、ソースコード上でテーブルをモロに
意識しなきゃいけないのがダメダメってこと。
複数のテーブルから一つのオブジェクトを
作りたい場合なんかだと、Torque は全く使い物にならん。
だから仕様変更で他のテーブルの情報が必要になったとき、
JOINであっさり解決する所もTorque様のおかげで
ソースコードを相当直さなきゃならんかった。
これもTorqueの「Entityとそれにアクセスするクラスが継承関係で
ぎっちり結びついてる」、なんていう、古すぎる設計のせいだな。
使うなら他のFrameworkをお薦めする>諸氏
Hybernateもためしに使ってみたが、まぁまぁよさげ。学習コストがちと高いが。
>とりあえず決まりきったコーディングを一律に自動生成する
>ことによってエンバグを防ごう、って感じじゃない?
それはそうだろう。
が、IDEが進歩したり、テストのFrameworkを使うようになったから
コーディングスタイルの強制でエンバグを防ぐためのコード自動生成って
いうのは以前より意味が薄くなってきてる感じがする。
>>685
大事だが、プログラマとして振舞う時は隠しとけ、って事かな。
0687デフォルトの名無しさん
2005/06/05(日) 18:14:51Hibernateはアノテーションと一緒に使うのがよいですよ。
まだベータだけど期待大。
0688デフォルトの名無しさん
2005/06/05(日) 19:43:11EJB3.0もそっちの方向だよね。
なんか乱立気味だ。
ていうかクレイグがEJB3.0のスペックリードだっけ?
0689デフォルトの名無しさん
2005/06/05(日) 20:34:16クレイグはStrutsの人で、JSFのスペックリード。
0690デフォルトの名無しさん
2005/06/05(日) 20:36:21ひきこもりサンデーPGだからよう
自前のXML->SQL,JavaBeanジェネレータとか作って遊んでただ
でもよう、ひきこもってたら米がなくなってよう
こんなオリにおすすめのO/Rマップを教えてくれよう
0691デフォルトの名無しさん
2005/06/05(日) 21:02:01ごめん、クレイグはWebの人だったね。
Hibernateはグラビンだったかな。
0692デフォルトの名無しさん
2005/06/05(日) 21:03:19EJB3サイコー
0693デフォルトの名無しさん
2005/06/05(日) 22:20:37お仕事がんばれ。
0694デフォルトの名無しさん
2005/06/05(日) 23:59:36そう言われてみればそうだな・・・。
ttp://www.apache.org/foundation/martin.html
0695デフォルトの名無しさん
2005/06/07(火) 19:03:11複数テーブル間のJOINした結果を受け取るのって、
どんな形式になるんかな?
この辺ながめてみたけど、JOINは想定してない記事?
http://blog.hibernate.org/cgi-bin/blosxom.cgi/2004/08/23#customsql
http://www.hibernate.org/hib_docs/v3/reference/en/html_single/#querysql
http://www.theserverside.com/blogs/showblog.tss?id=Hibernate3_JDBC
0696デフォルトの名無しさん
2005/06/10(金) 20:14:33現在メモリ節約の関係でiBATIS使いなんだけど、
Hibernate3に乗り換えようかと悩んでしまうよ。
横レス失礼
0697デフォルトの名無しさん
2005/06/11(土) 01:06:18SQLQueryだったら
SQLQuery q = sess.createSQLQuery(
"select {s.*}, {t.*}, {u.*} from t_sss as s join t_ttt as t join t_uuu as u");
q.addEntity("s", Sss.class);
q.addEntity("t", Ttt.class);
q.addEntity("u", Uuu.class);
とするとq.list()としたときにList<Object[]>が得られる。はず・・・。
[0]がt_sssのマッピングで[1]がt_tttのマッピングで、とか。
0698695
2005/06/13(月) 11:18:47dクス!
>とするとq.list()としたときにList<Object[]>が得られる。はず・・・。
>[0]がt_sssのマッピングで[1]がt_tttのマッピングで、とか。
ってことは、[0]に入っているt_sssのマッピングから、実際のマップされたオブジェクトの
配列だかコレクションだかを取り出してやればいいってことですかいな?
0699デフォルトの名無しさん
2005/06/20(月) 15:49:36たとえば、注文テーブルと注文詳細テーブルみたいなのがあって
1対Nの関係になってるとき
オブジェクト化するということは
注文テーブルのクラスは
class Chumon {
private List syousai; //Syousaiクラスのリスト
}
のようにコンポジット構造にするってことですよね?
注文詳細テーブルのクラスは注文テーブルのクラスありきで使用する
見たいな感じで
ここまであってるでしょうか?
0700デフォルトの名無しさん
2005/06/20(月) 15:51:470701デフォルトの名無しさん
2005/06/20(月) 16:07:06うう、すみません。
ところで、あってるということでしょうか?
とりあえず質問していきたいと思います。
私の気になっているところはどの時点で関連をばらしてしまうのか?ということです。
DAOクラスを作る場合
各テーブルごとのDAOクラスを作成していますが
そのばあい、注文のDAOは
calss ChumonDao{
public void insert(Chumon chumon);
}
注文詳細のDAOは
calss SyousaiDao{
public void insert(Syousai syousai);
}
のように作成しています。
DAOに委譲した時点で既にテーブル間の関連はなくなっているので
DAOを呼び出すビジネスロジックで関連をばらしてあげる
という感じにしました。
このやり方って間違ってますか?
0702デフォルトの名無しさん
2005/06/20(月) 16:17:05public void insert(Chumon chumon){
newChumon = chumonDao.insert(chumon);
Integer id = newChumon.getChumonId();
List syousaiList = chumon.getSyousai();
for(Iterator it=syousaiList.iterator();it.hasNext();){
Syousai syousai =(Syousai)it.next();
syousai.setChumonId(id);
syousaiDao.insert(syousai);
}
}
0703デフォルトの名無しさん
2005/06/20(月) 20:11:31O/Rマッピングにも色々あるが関連を作れるものが殆どだと思う。
んで、DB一行一オブジェクト的DTOと、domainオブジェクトは
別なものだと分けて考えた方がいいと思うよ。頭の中でそれが
混在してるとヤバい結果に繋がる。その上でトランザクションの
範囲とかをキチーリ把握して。
例えば;
>DAOに委譲した時点で既にテーブル間の関連はなくなっている
Chumonを更新完了した後でSyosaiの更新が落ちたらどうする?
0704703
2005/06/20(月) 20:18:37君がもしChumonDaoでcommitをやってるなら
君のソースは屑です。
AOPの宣言的トランザクション等を利用するなら
君のソースは使えます。
0705デフォルトの名無しさん
2005/06/28(火) 19:09:22例:
TableA:
id
creator_user_id
updater_user_id
Usertable
id
name
↑のようなテーブルがあって、TableAのcreator_user_idとupdater_user_id両方に
Usertableとのmany-to-one関係を指定したら、Hibernateの起動時に
net.sf.hibernate.MappingException: Repeated column in mapping for class sample.tablea should be mapped with insert="false" update="false" : id
↑のようなエラーが出て初期化に失敗します。
メッセージの通りinsertとupdateをfalseに指定したら動くようになったが、
(例の構成ではそうでもないが)更新ができないようではやはり少々不便なので、
何か解決法はないのでしょうか?
0706デフォルトの名無しさん
2005/06/28(火) 19:21:29設定の失敗をHibernateのせいにしないこと。
おかしいだろ。
> Repeated column
0707デフォルトの名無しさん
2005/06/28(火) 19:31:40見直したら確かにcolumnを勘違いして、対象テーブルのカラムを入れのが原因だった。
ありがとう&吊って来る。
0708デフォルトの名無しさん
2005/06/29(水) 10:23:520709デフォルトの名無しさん
2005/06/29(水) 11:21:100710デフォルトの名無しさん
2005/06/30(木) 22:52:54Tomcat上で動作させるとMappingExceptionがでるんですが、
解決方法ありませんか?
0711デフォルトの名無しさん
2005/06/30(木) 23:38:24バージョンは?
0712デフォルトの名無しさん
2005/07/07(木) 15:35:05//前処理(referenceの一部コピペ)
tx = session.beginTransaction();
BlogItem item = (BlogItem) session.load(BlogItem.class, itemid);
item.setText(text);
tx.commit();
session.close();
これでやってくれれば問題はないだが、
BlogItem item = (BlogItem) session.load(BlogItem.class, itemid);
item.setText(text);
session.flush();
session.close();
とflushだけされると、
そのコネクションにコミットされてないデータが残り、
hibernate内蔵のコネクションプーリングを使っているとそのコネクションを引き継いだ
リクエストだけほかのと違う値が帰ってくるという問題があった。
DBCPを使うととりあえずは直ったが、少々疑問が。
1、これはhibernate内蔵のコネクションプーリングのバグ?
2、hibernate的にcloseで放棄されたjdbcコネクションはプールに戻るが、
rollbackは誰が実行したのですか?
3、2でもしDBCPがやってるとしたら、これは自前で例えばcloseする前に
rollbackしたほうがいいですか?(コネクションの種類が変わると動作も変わるってのもあれなので)
0713デフォルトの名無しさん
2005/07/07(木) 15:40:56DBCP使っても結果は変わらない。
うむ・・いつ、どの層でどうrollbackさせようか・・・・
0714デフォルトの名無しさん
2005/07/12(火) 15:42:12SpringとHibernateをTomcatで、組み合わせて使っているんですが、
DAOからEntityを取得して、AさんがそのEntityの内容を変更すると、
Bさんにもその変更内容が伝わってしまうんですけど、なんでなんでしょう?
当然別のマシンからアクセスして、HttpSessionなんかも違う状況です。
詳しく書くと
ページ1
Aさん: ent1 = entDAO.getEnt1(100);
ent1.setName("hoge");
Bさん: ent1 = entDAO.getEnt1(100);
ent1.getName() // "hoge"が帰ってくる
ご存知の方、教えてくださいまし・・・
0715デフォルトの名無しさん
2005/07/12(火) 16:33:23>SpringとHibernateをTomcatで、組み合わせて使っているんですが、
問題の切り分けは出来ているのか?
取りあえず考えられる要素として、
1.Springの設定ミス。
・beanのsingleton属性を設定していない場合、Springから得られるbeanのインスタンスはアプリケーション内で共有される。
ちなみに手元にあるJavaWorld 2005/01 の Struts + Spring + Hibernateの特集ではsingleton属性はfalseに設定してあった。
2.DB関連のミス
・DBに送信されたクエリやテーブル/ビューの状態等。
3.セッションのスコープ範囲のミス
・セッションのスコープがapplicationスコープになっている等。
0716714
2005/07/12(火) 17:00:23>問題の切り分けは出来ているのか?
現状、Springと、Hibernateのどちらかとは踏んでいるけど、どちらかかは判別できていないです。
> 1.Springの設定ミス。
> ・beanのsingleton属性を設定・・・
これは、すべてのbeanタグに対してsingleton="false"に設定しています。
ただ、sesshonFactoryのLocalSessionFactoryBeanと、TransactionProxyFactoryBeanだけは、
singleton="false"に設定してしまうと、コンテナ起動時に、
「FactoryBeanは、Singleton="false"には、できません。」
と、怒られるのでやってません。
>2.DB関連のミス
うーん、これは考えづらい。DBから読んだあと、DBには更新を一度も行っていない状態で発生するので。
>3.セッションのスコープ範囲のミス
これもOKかと。セッションに埋まっている、データのインスタンスIDはAさんと、Bさんで違うので。
よろしくお願いします。
0717デフォルトの名無しさん
2005/07/12(火) 17:21:350718デフォルトの名無しさん
2005/07/12(火) 19:47:14すまぬ・・・
DBが更新されていた・・・すまん。
ただ、DB更新するコードは書いてなくいんだけど(つもり)、Entityの内容が変わると
トランザクション終了時にUpdateが走ってしまう。
うーん。そういうものでしたっけ?
0719デフォルトの名無しさん
2005/07/13(水) 01:01:34そうじゃないと、困る。
ってか、コミットしたときに永続化しないのなら怖すぎっていうかコミットにならないと思う。
0720デフォルトの名無しさん
2005/07/13(水) 09:45:55flushしたからじゃない?
0721デフォルトの名無しさん
2005/07/13(水) 12:07:18ん?ちょっと教えてください
Hibernateから取得したEntityは、sessionのSavaとか呼び出さなくても、Entityに変更が入ったら
DBの更新されちゃうんですか?
ちなみに、Springとの組み合わせなので、トランザクションの管理は、Springまかせですが
>>718
明示的にしている部分はないんだけど、auto_flashなモードとかってあります?
0722デフォルトの名無しさん
2005/07/13(水) 13:47:01flush()なんてメソッド使ったことないし
0723デフォルトの名無しさん
2005/07/13(水) 15:48:44キャッシュされた同じオブジェクトが帰ってきてるだけかと。
0724デフォルトの名無しさん
2005/07/13(水) 15:53:02勝手に最後にupdateしちゃうぞ
0725デフォルトの名無しさん
2005/07/13(水) 16:06:28そこで値が異なることを期待するほうがおかしいと思う。
0726714
2005/07/13(水) 16:39:37やっぱり最後にUpdateされるのは仕様ですか、そうですか。
あれ?ってことは、わざわざ save()とか呼ばなくてもいいってことですか?
昔、EntityBeanを使ってWebのアプリケーションを組んだときには、
EB直接編集すると、それこそトランザクションコミットした際にアップデートされてしまうので、
編集する際には、EBから、Value Object(今はDTO?)を取り出して、
編集はそのDTOに対して行って、最後にそのDTOをEBに戻して、
DBアップデートみたいなことをしてたんですけど。
Hibernateも同じ考えなんですかね?cloneして使うとか、かな?
こんな場合みなさんどうしてるんですか?できれば教えてほしいっす。
0727デフォルトの名無しさん
2005/07/13(水) 16:43:12flushしない限りは発行しないよ。
0728デフォルトの名無しさん
2005/07/14(木) 00:05:22> あれ?ってことは、わざわざ save()とか呼ばなくてもいいってことですか?
save()はSQLのINSERT相当です.
更新はHibernateセッションのflush()時に勝手にやってくれます.
> 昔、EntityBeanを使ってWebのアプリケーションを組んだときには、
略
> Hibernateも同じ考えなんですかね?cloneして使うとか、かな?
永続オブジェクトを取得したHibernateセッションを閉じてしまえば
そのオブジェクトは「Detached」な状態となり,変更してもDBには
反映されません.
それをDBに反映する際にはSession#update()を使います.
0729デフォルトの名無しさん
2005/07/14(木) 00:08:05> flushしない限りは発行しないよ。
明示的にFlushMode.NEVERにしない限り,トランザクションのコミット時などに
flush()自体が勝手にされます.
0730714
2005/07/15(金) 13:08:17大変参考になりました。
まとめ。トランザクションがある前提で・・・
1.あるセッション上でDBから取り出したEntityに変更が加わった場合、
トランザクション終了時に変更がDBに反映される。(FlushMode.AUTO)
2.Entityに対する変更をDBに適用したくない場合 -> FlushModeをNEVERにする
3.2で取り出したEntityを別のセッションでDBに反映させたい場合、Session#Update(Entity)する。
と、いうことですね。私の環境はSpringなので、上記の状況のFlushModeを適用したい場合
Springのトランザクションの設定で、
PROPARGATION_REQUIRED -> FlushMode.AUTO
PROPARGATION_REQUIRED,readOnly -> FlushMode.NEVER
と、すればOKと。
なので、Webで、表示、入力、更新確認は、readOnlyで設定(FlushMode.NEVER)。
DB更新が必要な場合は、readOnlyを指定しない(FlushMode.AUTO)、
変更の反映が必要なDetachedなEntityを更新する場合、update(ent)。
一時は真剣に、DAOから取り出すEntityは、
すべてcloneしてやろうかと思ってぞっとしてました。
あー、すっきり。ありがとうございました。助かりました。
0731デフォルトの名無しさん
2005/07/15(金) 13:29:38> すべてcloneしてやろうかと思ってぞっとしてました。
ぞっとするくらいDBに格納しない変更があるのが理解できんのだけど。
それに、同じオブジェクトが取得されてたら、DBが更新されたかされてないかにかかわらず、変更が伝播するよ?
0732714
2005/07/15(金) 14:13:17あ、意味が通じてなかったっすね。
>ぞっとするくらいDBに格納しない変更があるのが理解できんのだけど。
いえいえ、Entityに対する変更はかならず、DBに反映されて欲しいのです。
ただ、タイミングが問題で、というだけ。
入力画面->確認画面->結果画面があるとして
入力->確認でユーザの入力によってEntityは変更(確認画面表示のために)するけど
まだDBには反映させたくない。だって、ユーザが確認画面で「やめた」って、する場合もあるので。
>それに、同じオブジェクトが取得されてたら、DBが更新されたかされてないかにかかわらず、変更が伝播するよ?
うん。これは理解しているつもりなんだけど。なにか>>730の書き方変だったかしら?
0733デフォルトの名無しさん
2005/07/15(金) 14:19:14Hibernateから取ってきたものはDBの写像なので、ユーザー入力とは別に扱うべきだと思うけど。
とってきたエンティティの更新タイミングやキャッシュのされ方が気になるような設計は、あまりいい設計だとは思えない。
0734714
2005/07/15(金) 17:19:43>Hibernateから取ってきたものはDBの写像なので、ユーザー入力とは別に扱うべきだと思うけど。
>とってきたエンティティの更新タイミングやキャッシュのされ方が気になるような設計は、あまりいい設計だとは思えない。
うんうん、そのとおりなんだよね。おっしゃるとおりだと思います。
そこで、>>726の話に戻っちゃうんだけど、みなさんはどうしてるんでしょう?
HibernateのEntityの状態には2種類あって、detachな状態と、attachな状態。
detachな状態のEntityを更新しても自動的にDBには反映されないけど、
attachな状態のEntityを更新した場合には、反映されてしまう。
同じオブジェクトを操作しているにもかかわらず。
これを開発者が意識しないで、コードを書くようにするためにはどうしてます?
やっぱり、DAOからEntityを取り出す時に、DTOなりに値をコピーして取り出すんでしょうか?
Sessionから取り出す時にすぐにdetachにすることができれば簡単なんだけど。できるんかしら?
悩ますぃ。
0735デフォルトの名無しさん
2005/07/15(金) 17:39:580736デフォルトの名無しさん
2005/07/16(土) 14:19:40>>つまり、Hibernateでは、単一テーブルからデータを取ってくるだけなら複合キーでも
>>問題ないけど、リレーションを使おうとすると複合キーは使えないということなんでしょうか?
>
>そう。取ってくるだけなんて現実的にありえないから、全テーブル単一キーで設計するしかない。
>この時点でかなり萎える。。
かなり前の話ですまんす。
これって本当にできないんですか?試してみたら問題なくできているようなんですけど。
ちなみに hibernate3 使ってます。3から変わった?
複合キーをできれば避けるべきなのは同感だし、マニュアルにも避けろと書いてあるけど、
複合キーをやむなく使う場合、結局、どんな問題点があるんでしょう?
0737デフォルトの名無しさん
2005/07/16(土) 17:49:360738デフォルトの名無しさん
2005/07/17(日) 14:16:340739デフォルトの名無しさん
2005/07/17(日) 17:32:520740デフォルトの名無しさん
2005/07/17(日) 19:27:05SQLiteのような鯖を経由しないRDBで、ピュアJavaのものはありますでしょうか?
0741デフォルトの名無しさん
2005/07/17(日) 23:46:48HSQLDBやらDerbyやらCloudscapeみたいなもんか?
Derby=Cloudscapeね。
0742デフォルトの名無しさん
2005/07/18(月) 00:20:43組み込み系と呼ばれるホスティング専用のプロセスを立ち上げないDBMSです。
HSQLDBはスタンドアロンモードが組み込み用に用意されてるみたいですね。
でも3MBってのはちとでかすぎですかね。
SQLiteは242KBのDLLだから配布しやすいんですよね・・・
JNI経由でOS毎にDLL作ったほうがよいのでしょうか。
マナー違反?
0743デフォルトの名無しさん
2005/07/18(月) 01:04:17待て待て、3MBって何のサイズだ?
それ、ドキュメントやソース込みのzipファイルのサイズじゃないか?
HSQLDB1.8.0.1のhsqldb.jarは611kBだ。
それと、これ以上語りたいならこっちのスレが適切かと。
【Pure】HSQL database engine【Java】
ttp://pc8.2ch.net/test/read.cgi/db/1060970234/
0744デフォルトの名無しさん
2005/07/18(月) 13:58:25つhttp://www.ch-werner.de/javasqlite/
0745デフォルトの名無しさん
2005/07/19(火) 11:42:52セッションから切り離されたオブジェクトをDBに反映させるには、Session#update(obj);でいい?
切り離されたオブジェクトをupdateとすると、
a different object with the same identifier value was already associated with the sessson
と、怒られてしまうんですけどなんで?
hashcodeと、equalsは実装してます。
hibernateは、2.1.8です。
0746デフォルトの名無しさん
2005/07/19(火) 11:57:030747デフォルトの名無しさん
2005/07/19(火) 14:22:00よろしくお願いします。
0748デフォルトの名無しさん
2005/07/19(火) 21:01:140749デフォルトの名無しさん
2005/07/19(火) 22:34:340750デフォルトの名無しさん
2005/07/19(火) 22:54:00もうJNIで実装はされているのね。
あんがと。ネイティブで頑張る。Win/Linux以外はユーザに作らせる。
0751デフォルトの名無しさん
2005/07/20(水) 00:40:100752デフォルトの名無しさん
2005/07/20(水) 04:24:41update()に渡すオブジェクトと同じレコードにマッピングされたオブジェクトが
すでにセッションにあると例外が飛んできます
つまりupdate()するオブジェクトをfind()とかしちゃダメ
http://d.hatena.ne.jp/koichik/20040812#1092329105
0753デフォルトの名無しさん
2005/07/20(水) 09:47:56>>745の人が>>728の人と同じ人なら、>>733という意見なので、ごちゃごちゃイレギュラーなことの対応のために頭使うのはバカらしい、ということで。
0754デフォルトの名無しさん
2005/07/20(水) 11:43:24> ふつうにfindしたオブジェクトを変更してupdateしてるけど・・・
そのfindとupdateが同じセッションならupdateはムダ
>>745はセッションAでfindしたオブジェクトを変更してセッションBでupdateしようって話
そのセッションBでもfindしてるから例外になる
0755デフォルトの名無しさん
2005/07/20(水) 17:58:46>> ふつうにfindしたオブジェクトを変更してupdateしてるけど・・・
>そのfindとupdateが同じセッションならupdateはムダ
そうなのよね、同一セッション内ならFlushで更新されるからupdateは無駄なんだよね。
でも、ちまたのサンプルだと同一セッション内でもupdate呼んでる例が多い。まじめに勘違いしてた。
>>733な意見なのはよくわかるんだけど、どうやってるの?
設計段階、もしくはコーディングのルールとして開発者が「意識して」オブジェクトの内容を
変更しないように気をつけているの?
それともなにか別の仕組みとして、開発者が意識しなくても制御できるようになっているの?
誰かおせーて。
0756デフォルトの名無しさん
2005/07/20(水) 18:14:390757デフォルトの名無しさん
2005/07/20(水) 21:38:27マッピングオブジェクトへの変更は、DBの変更のために行う。
マッピングオブジェクトを変更したときにDBが変更されないように「意識して」設計したりしない。
0758デフォルトの名無しさん
2005/07/26(火) 03:50:15DAOレイヤーのオブジェクトをビジネスレイヤーより下の階層に渡すってのは
あまりやらない方が良い事なのでしょうか?
evictした後に渡すべき何でしょうか。
その辺悩んでおります。
0759デフォルトの名無しさん
2005/07/29(金) 22:26:39CastorXMLみたいなことできるか?
0760759
2005/07/30(土) 14:12:07マッピングファイルを使ってある程度自由なXMLを書き出すことができるのはCasterと一緒か。
0761デフォルトの名無しさん
2005/08/09(火) 17:07:54many-to-one関連で主キーを使ってマッピングした場合は外部制約を正しく生成してくれるが、
property-refを使ったmany-to-one関連はまったく生成してくれなくて困っています。(hbm2dllで)
何かパラメータの指定で出来るのか、
それとも元々property-refでの関連では外部キーを使わないものでしょうか?
(出来れば主キーにマッピングしたいところだが、
外部のデータと連携するために他のDBと一意のユニーク値で連結する必要があるので)
0762デフォルトの名無しさん
2005/08/15(月) 14:58:34オブジェクト生成に独自のコンテナ(といってもSpringですが)を使っている為、
オブジェクトのインスタンス化をフックしたいのですが
Interceptor.instantiateをインプリ面とすれば良いという所までは突き止めました。
しかし、この関数 id を引数に取るのですが、オブジェクトに id を設定してやらないと
エラーになってしまうようなのです。しかしながら、 Hibernateを使っている方なら
ご存知の通り、 id はHibernateの設定ファイルで自由に指定できます。
Hibernate自身の設定ファイルの設定に従ってオブジェクト id を設定するような
インターフェースは無いものでしょうか。
0763762
2005/08/15(月) 15:36:44マニュアルにしっかりのってました。。
SessionFactory#getClassMetadata
0764デフォルトの名無しさん
2005/08/18(木) 19:36:33timestampにはoptimisticロックの「安全性の低い実装」とあるから、使うのをとてつもなく躊躇する。
じゃぁ、安全性の高い実装は何なの?と思ったり。
versionもトランザクションが長い場合に使うとあるのだが、自動的にインクリメントされるの?
ロックの競合を防ぐために使われるもの?説明が足りなくてこまるなぁ。
使ったことある人、どういう用途で使ってるのか、実用的かを教えてクリクリトリス
0765デフォルトの名無しさん
2005/08/19(金) 00:50:48されるわけだ。
具体的にはユーザAがある列をSELECTする(VERSION=0)。ほかのユーザBが同じ列をSELECTする(VERSION=0)
で、ユーザBがなにか変更してUPDATEをおこなう。このときVERSIONは1になる。さらにユーザAも何か変更
してUPDATEしようとする。しかし、自分の知っているVERSIONより新しくなっているので更新できずに例外
が発生する、というわけだ。
まぁ、WEBアプリなんかではありがちな手法だと思うが。便利かどうかはシステムの仕様次第じゃないか。
ちなみに間違ってても責任とれんので実験してみてくれ。
0766デフォルトの名無しさん
2005/08/19(金) 08:04:45オレ的には別に他ユーザーがupdateしちゃったとしてもそのまま上書きしてもいい感じがするんだがなぁ(初心者的発想w
なんでそんな七面倒なカラクリが必要なんだろうな。
0767デフォルトの名無しさん
2005/08/19(金) 11:01:38変にupdateしちゃうと二万円増えるはずが
一万円しか増えないかもしれなくて問題だろ?
0768デフォルトの名無しさん
2005/08/19(金) 11:03:46それはアップデートする直前にselect for updateすれば解決だから例えとしては微妙ですな。
0769766
2005/08/19(金) 13:49:53口座テーブルにAとBが同時に1万振り込むって、insert into するので、rowが衝突することが無い希ガス。
誰か漏れを上手に納得させてクリクリ.
0770766
2005/08/19(金) 13:55:57http://e-words.jp/w/E383ADE38383E382AF.html
が、なんか釈然としない。
これはデータベース側の話であってHibernateが持つversionとかtimestampなどのカラクリとでは違う希ガス。
どうもウマく説明できないな(;´д`)
0771デフォルトの名無しさん
2005/08/19(金) 14:00:02だから仕様次第。
長めのテキストの誤植を直すような時には上書きしちゃ困るし。
0772デフォルトの名無しさん
2005/08/19(金) 14:14:08俺が編集画面を開いて、編集している間に他の人がデータを変更したら困る場合に使う。
例えば・・・そうだな、会議室の予約とか。
先にとった人が居たのに上書きされじゃ困るよな?(まあこれも他の方法で避けられるが
0773デフォルトの名無しさん
2005/08/19(金) 14:14:26Wikiとかそーなってるよな
0774766
2005/08/19(金) 14:21:12週末の昼間からどうもありがd。だんだん理解してきた。
やり方にもよるかもしれないが、更新直前にselectで同じrowを拾ってきてversionみて、編集中のものと比較して
違っていたら例外、っていう感じになるのかな?
0775デフォルトの名無しさん
2005/08/19(金) 14:54:460776デフォルトの名無しさん
2005/08/20(土) 20:54:550777デフォルトの名無しさん
2005/08/20(土) 20:56:58それは取得できた行のみの話なんだよな ま、わかっているとは思うけど
0778デフォルトの名無しさん
2005/08/29(月) 00:00:33これでHibernateでXDocletを使う必要がなくなる。
アノテーションでO/Rマッピングを記述する - Hibernate Annotator公開 (MYCOM PC WEB)
http://pcweb.mycom.co.jp/news/2005/08/19/004.html
@H8Class(table="GROUP")
class Group {
@Id(generator=@Generator("uuid.hex")) private String id;
@Property private String gname;
@H8Set(
key = @Key(column="gno"),
value = @CollectionValue(otm = @OneToMany())
)
public Set<Member> memberSet = new HashSet<Member>();
}
<hibernate-mapping>
<class name="sample.Group" table="GROUP">
<id name="id">
<generator class="uuid.hex"/>
</id>
<property name="gname"/>
<set name="memberSet">
<key column name="gno"/>
<one-to-many class="sample.Member"/>
</set>
</class>
</hibernate-mapping>
0779デフォルトの名無しさん
2005/08/29(月) 00:09:49EJB3に準拠してたほうががなにかと便利だし。
0780デフォルトの名無しさん
2005/08/29(月) 01:47:37価値がわからん。
>>779の言う通り、オフィシャルのHibernate Annotationsでいいと思う。
0781デフォルトの名無しさん
2005/08/29(月) 02:52:23今までXDocletでしかできなかったことが言語使用レベルで
できたことで、エラー警告情報などがJava側で確認でき
一括管理できたというメリットがあるのかな?
XDocletとルールも全然違うことに驚かされる。
それよりも、Genericsが使えるようになったのは大きいかと。
推測だが、以前よりもエラーチェックが厳しくなって堅牢性が高くなったことが大きな価値のひとつにみえる。
0782デフォルトの名無しさん
2005/08/29(月) 03:46:35(゚Д゚)ハ?
0783デフォルトの名無しさん
2005/08/29(月) 04:37:59Hibernate Annotationsは、次期バージョンEJBに準拠してるわけだが。
Hibernate Annotationsという、Java標準に準拠していてオフィシャルのアノテーションがあるのに、どういう価値がannotatorにあるのかがわからん。
annotatorはEJB3に基づいてないから最新の要求に応えられるって書いてあるけど、Hibernate Annotationsにもhibernate独自のアノテーションはたくさん含まれてるわけだし。
実際使おうと思ったらhibernate独自のアノテーションも使う。
0784デフォルトの名無しさん
2005/09/02(金) 17:43:040785デフォルトの名無しさん
2005/09/02(金) 18:22:03漏れの知識不足でなければムリポ。
beanのsetterで工夫するしかないんじゃない?
0786デフォルトの名無しさん
2005/09/03(土) 12:58:47QueryWithRowHandler
0787デフォルトの名無しさん
2005/09/06(火) 22:08:51PARENT 1<-->* CHILD
な関係にある二つのテーブルに対して
どちらも自動採番する ID 列を持ってた場合、
(Child は non-null な Parent の ID 列を外部キーに持つ)
Parent p = new Parent();
// p のプロパティ設定
Child c = new Child();
// c のプロパティ設定
c.setParent(p); --------(1)
p.getChildren().add(c);
session.merge(p);
みたいなことをやりたいのですが、CHILD.PARENT_ID に NULL を挿入できません、と言われます。
PARENT への INSERT より先に CHILD への INSERT が走ってるらしく
1 でセットした p は DB とは関連付けられてないので PARENT_ID も確かに NULL だろうなぁと言う感じです。
こういう場合って、一度 p を保存してから、
Child を add して、また p を保存、とかってやるんでしょうか?
きっと設定がおかしいだけなんでしょうけど
bidirectional とか inverse とかいろいろあって
どこから手を付けていけばいいのか分かっていません。
0788デフォルトの名無しさん
2005/09/06(火) 22:59:35試したことないけど、とりあえず id generator は foreign を指定してんだよね。
0789デフォルトの名無しさん
2005/09/07(水) 17:30:48アレからいろいろ試してみましたが、
merge() を使ってたのがダメだったみたいで
saveOrUpdate() に変えたらテストが通りました。
よく分かってないので、リファレンスの該当部分を読み直してきます。
お騒がせしてすいませんでした。
>788 さん
id 列は sequence にしています。(環境は Oracle)
one-to-many なので foreign は使っていません。
0790デフォルトの名無しさん
2005/09/10(土) 14:33:00TomcatとOracleASで動作検証をしたところ、
SQLの実行結果に違いがでています。
(Tomcatで実行した場合はデータが取得できるが、Oracleの場合は
データ件数が0件)。
原因の特定のために調査しているのですが、
例えばSAXパーサーの違いなどにより、
iBATISの動作が変わることなどはあるのでしょうか?
何か似たような症状が現れたことがある方はいませんか?
0791名無しさん@そうだ選挙に行こう
2005/09/10(土) 19:00:11iBATISはぜんぜん知らないのだが、
発行しているSQL文はログで見れないの?
0792デフォルトの名無しさん
2005/09/12(月) 10:12:01漏れはoc4j、Tomcat、OraDB、iBATIS、spring、JSFだけど
そんな症状見たことない。
つーか、トランザクション環境さえも晒さないで、答えを
得られるとでも思ってるの?
とりあえず>>791が書いてるようにログ見ろ。
ログレベルをdebugにするよろし。
0793デフォルトの名無しさん
2005/09/13(火) 00:02:50ログ見て一緒ならトランザクション隔離レベルかな?
oc4jのデフォルトってSerializableだったりすんの?
0794デフォルトの名無しさん
2005/09/13(火) 01:02:41多少問題が起こるのは予定調和ジャマイカ
0795デフォルトの名無しさん
2005/09/13(火) 22:35:39今hibernateを勉強してて、ちょっと思ったんけど
例えば
あるテーブルAとテーブルBが1:Nというmappingはできたんだけど
テーブルAとテーブルBが1:NでテーブルAとテーブルCが1:Nの場合に
テーブルAのmappingでone-to-manyの書き方が、いまいち分かりにくいんですが
この場合は、どう書けばいいのでしょうか?それともHQLかSQLを書くしかないのかな?
0796デフォルトの名無しさん
2005/09/13(火) 23:56:27>あるテーブルAとテーブルBが1:Nというmappingはできたんだけど
をテーブルCの分も書けばいいでない?
hbmをさらしたほうがはやいかも。
0797デフォルトの名無しさん
2005/09/14(水) 21:09:370799デフォルトの名無しさん
2005/09/14(水) 21:51:310800デフォルトの名無しさん
2005/09/14(水) 22:28:230801デフォルトの名無しさん
2005/09/15(木) 00:24:57昔、通勤途中の電車で「はじめてのC」本を読んでたときの
女子高生達の冷たい視線が懐かしい。
0802デフォルトの名無しさん
2005/09/15(木) 00:36:16【質問1/2】
table : GRP_INFO
GRP_ID (primary key)
GRP_NAME
table : USR_INFO
USR_ID (primary key)
USR_NAME
table : RLM_INFO
GRP_ID (foreign key -> GRP_INFO.GRP_ID)
USR_ID (foreign key -> USR_INFO.USR_ID)
((GRP_ID, USR_ID)でunique)
という、ユーザが複数のグループに登録できるリレーションを考えたとき、
その更新処理においてRLM_INFOのhbmを読み込む段で例外(MappingException)が出ます。
primary key がない場合はhbmを手書きでゴリゴリ修正しなければならないのでしょうか?
0803デフォルトの名無しさん
2005/09/15(木) 00:40:44table : PST_INFO (役職ID, 役職名)
PST_ID (primary key)
PST_NAME
table : USR_INFO に
PST_ID (foreign key -> PST_INFO.PST_ID) を追加。
尚ここはNULLでも可で、NULLの人はニートという設定で、
GRP_ID = x に属するユーザ情報はSQLで簡単に書けますが、
hibernate的に、外部結合を含んだこのような検索はどう実装すればよいでしょう?
ご協力をよろしくお願いします
0804デフォルトの名無しさん
2005/09/15(木) 00:46:47g.grp_name, u.usr_name, p.pst_name
from
grp_info g, rlm_info r, usr_info u, pst_info p
where
g.grp_id = x and
g.grp_id = r.grp_id and
r.usr_id = u.usr_id and
u.pst_id(+) = p.pst_id
;
0805デフォルトの名無しさん
2005/09/15(木) 03:26:51>その更新処理においてRLM_INFOのhbmを読み込む段で例外(MappingException)が出ます。
>primary key がない場合はhbmを手書きでゴリゴリ修正しなければならないのでしょうか?
<composite-id> を使えば ok。
でも一意なキーを作ったほうがらくかもね。
0806デフォルトの名無しさん
2005/09/15(木) 04:48:05どっちが設計的に優れてるんかな?
俺は後者の方が吉だと感じるんだが。
もっともORMとは直接関係ない話だが。
0807デフォルトの名無しさん
2005/09/15(木) 07:45:36<composite-id>
</composite-id>
こんなふうに空でできています。
ここに何か入った状態で自動生成させるには、
前工程(middlegenの設定?)のどこかで何かやるのか、
これから会社いって確認してきます。ありがとうございました。
>>806
確かに設計的にはそうかも。
でもこれで巻き取り対象の旧システムは
(+)使いまくりのニートな設計なのでしたorz
0808デフォルトの名無しさん
2005/09/15(木) 09:34:39?プラグインの中のjarを取り出せば、2.xの時と同じように使えるが
0809デフォルトの名無しさん
2005/09/15(木) 16:03:48ant タスクのパラメータとか結構変わってませんか?
2.1.8 の時の丸写しでサックリ試すつもりだったので
ちょっと面食らってしまってました。
でも落ち着いてみたら大した問題ではなかったでした、、、すいません。
早くalpha取れて欲しいです。
マッピングファイルを正にしたいんで。
0810デフォルトの名無しさん
2005/09/19(月) 19:36:14>昔、通勤途中の電車で「Cの達人」本を読んでたときの
>女子高生達の冷たい視線が懐かしい。
いまググッたらC言語ではなくCのみの本は
たのしいC
やさしいC
独習C
特に最後の奴は誤解を招きやすい・・・
気を付けろ!(アイツのような口調で)
0811デフォルトの名無しさん
2005/09/19(月) 21:19:53その前におっぱいさわったら出しちゃってたから、若いってスゴイんだなと改めて実感。もう20年近く前だがな………otz
この間の法事で久々にあったときはいい感じのババァになってて、コアダンプはきそうになりますた。
0812デフォルトの名無しさん
2005/09/19(月) 21:33:55コアダンプをゲロの意味で使うって事はASCII関係かIIJ関係の人か?
0813デフォルトの名無しさん
2005/09/20(火) 01:40:380814デフォルトの名無しさん
2005/09/22(木) 01:49:22たんなるじじいだろ。
0815デフォルトの名無しさん
2005/09/22(木) 07:27:340816デフォルトの名無しさん
2005/09/24(土) 14:20:15外部キーや参照整合制約が一切作られていない、DBがありまして、
そこからMiddlegenで、マッピングを自動生成しました。
DB上は関連が定義されていないのですが、自動生成されたマッピングを手で修正して
関連を追加してあげると、今後、自動生成できなくなってしまいます。
自動生成はしたいけど、マッピングに追記もしたい場合には、なにかいい方法はありますか?
0817デフォルトの名無しさん
2005/09/24(土) 16:59:23追加したテーブルだけ自動生成する
0818816
2005/09/24(土) 22:09:33DB側の修正が、テーブルが増えるだけならいいのですが、列が増えたりすることもあるので。
考えたら、DB側は、そんなに頻繁に変更されない(はず)ので、
初回だけ自動生成して、あとは自動生成せずに、手で変更分だけ修正と割り切ってもよいような気もします。
初回の全テーブルのマッピングを作ってくれるだけでも、相当楽なので。
0819デフォルトの名無しさん
2005/09/26(月) 18:29:38http://www.everes.net/145
………なんつーか、完璧な道具なんてどこにもありゃしないのに文句たらたらで
具体的な回避策も示さずにいるみっともないエンジニアという感じだな。
0820デフォルトの名無しさん
2005/09/26(月) 18:54:11(DBの複数対応が必要な場合ってそんなに多いか?)、
しかし現実はそーなってない、その場合世間を疑う前にまず自分を疑ってみるべきだと思うがどうか
0821デフォルトの名無しさん
2005/09/26(月) 18:54:13別に Hibernate マンセーじゃないけど、使えないのは Hibernate じゃなくて、
自分だという事に気が付いてないんじゃないかね。
そこに書いてある減少でハマったことはない。
0822821
2005/09/26(月) 18:56:020823デフォルトの名無しさん
2005/09/26(月) 19:27:212.xから3にバージョンアップした時にこれにははまったな。
あまりにも横暴な変更にワラタ
0824デフォルトの名無しさん
2005/09/26(月) 19:44:39解決策から目をそらす・・・
0825デフォルトの名無しさん
2005/09/26(月) 20:05:04多少の回避策はあげていても結局は使うな、使うなって連呼しているところに違和感を感じる。
0826デフォルトの名無しさん
2005/09/26(月) 20:11:380827デフォルトの名無しさん
2005/09/26(月) 21:23:36hibernate云々の問題じゃないような気がする
0828デフォルトの名無しさん
2005/09/26(月) 22:09:230829デフォルトの名無しさん
2005/09/26(月) 22:42:13技術力はある人なんだけどな、どうしてあぁも壊れてるんだか_| ̄|○|||
0830デフォルトの名無しさん
2005/09/26(月) 23:07:470831デフォルトの名無しさん
2005/09/27(火) 00:00:130832デフォルトの名無しさん
2005/09/29(木) 00:16:414のように自動更新したりとか、EJB1,2に引っ張られてる部分が多いし、無駄機能を実装するためにわかりにい部分も多い。
ま、大体の問題はどうにかなるし、ほかにまともな選択肢は少ないけど。
0833デフォルトの名無しさん
2005/09/29(木) 00:37:03単純にテーブル単位でデータ持ってきて更新ってときは便利だし
それ以外はDbUtilsあたりでいいやと思ってるのだが
0834デフォルトの名無しさん
2005/09/29(木) 00:42:350835デフォルトの名無しさん
2005/09/29(木) 07:05:27> 3もリストを毎回POJOに(しかも必要な関連のオブジェクトも含め)コピーするのは考えたくもありません。
> 解決策から目をそらす・・・
そこでDxOですよ
つうかこれでトラブるってことは、引っ張ってきたオブジェクトを
(RDB上のデータを更新する意図がないのに)触ってるってことだよな。
1000→1,000みたいな(MVCの方の)Viewでやるような編集を
引っ張ったオブジェクトをネタにやってて、
その編集結果をそのオブジェクトに上書き保存wとかやってる悪寒。
とはいえ、VBの時代じゃあるまいし、今時そんな設計ありえるのかね?
0836デフォルトの名無しさん
2005/09/29(木) 12:22:01hibernateのソースコード読んでみれ
元ネタにも触わって無くても更新されるって書いてあんべ
0837デフォルトの名無しさん
2005/09/29(木) 12:32:360838デフォルトの名無しさん
2005/09/29(木) 19:56:23結合し始めるは微妙?
0839デフォルトの名無しさん
2005/09/29(木) 21:04:40パフォーマンスもそんなに悪くない。キャッシュが有効なときはJDBCより良いケースがある。全体的にコードの見やすさが向上するよ。
0840デフォルトの名無しさん
2005/09/29(木) 22:35:49Hibernate が適用できそうにない案件ばっかで泣ける。
0841デフォルトの名無しさん
2005/09/30(金) 09:51:33こんなところまで来て宣伝すんな
2行目seaser関係ねぇしw
0842デフォルトの名無しさん
2005/09/30(金) 23:53:02そういうお前はちゃんとつかいこなせているのか?戦闘力はいくつぐらいだ?
0843デフォルトの名無しさん
2005/10/01(土) 01:10:17ソースのどこ読めばいい?
0844デフォルトの名無しさん
2005/10/03(月) 19:02:33RDBMSの方言を吸収するためのクラスを教えてくれ。
どうもマッピングでうまくいかねーorz
0845デフォルトの名無しさん
2005/10/03(月) 19:04:51参考文献はこいつ
っ ttp://www.techscore.com/tech/Others/Hibernate/02.html
0846デフォルトの名無しさん
2005/10/03(月) 19:25:09マニュアルみれば、すぐわかるじゃん。
http://www.hibernate.org/hib_docs/v3/reference/en/html/session-configuration.html#configuration-optional-dialects
ちなみにこれは3.0のやつで、2.1だとパッケージ名違うので注意。
0847デフォルトの名無しさん
2005/10/03(月) 22:06:39Re: hibernateを利用してはいけない5つのシチュエーション
0848デフォルトの名無しさん
2005/10/04(火) 10:29:290849デフォルトの名無しさん
2005/10/04(火) 18:38:49かわいそうに。今頃必死でevict()入れてるよw
0850デフォルトの名無しさん
2005/10/04(火) 21:59:200851デフォルトの名無しさん
2005/10/04(火) 22:35:34朝までにはk(1)さんが教えてくれるよ。
それにしてもスパム災難だな。
デルモヲチブログと比較されたせいで獄長の標的w
0852デフォルトの名無しさん
2005/10/05(水) 02:03:10Dirty Flagはないけど、プロパティの変更を調べてUpdateしてたはず。
プロパティいじってんのに勘違いして全Updateと思い込んでるんじゃ?
Hibernateの更新操作の挙動って、仮想メモリの考え方(File Mapping)に
近くて、その辺を知ってる人にとっては扱いやすいと思うんだけどなー。
あるエンティティの関連エンティティをLazyなプロパティ経由でアクセスした
タイミングで、セッション中に存在しなかったら自動的にストレージから読み込む。
セッション中のエンティティが更新された(Dirty)なら適当なタイミング(flushなど)
で自動的にストレージに反映される。
セッション -> 物理メモリ
エンティティ -> ページ
プロパティ操作 -> メモリアクセス
データベース -> マッピング先のストレージ
ほら、似てると思わない?
0853デフォルトの名無しさん
2005/10/05(水) 02:12:30書いた奴が永続化オブジェクトを分かってないということでFA?
0854デフォルトの名無しさん
2005/10/05(水) 18:43:29後はスパムがそれを認めるかどうかだな。
あるいは某Aのように緘黙症になるかw
0855デフォルトの名無しさん
2005/10/05(水) 23:50:010856デフォルトの名無しさん
2005/10/06(木) 01:05:480857デフォルトの名無しさん
2005/10/06(木) 08:51:36普通、問題が起こった瞬間にそこを疑いそうなもんだが・・・
0858デフォルトの名無しさん
2005/10/06(木) 12:49:070859デフォルトの名無しさん
2005/10/07(金) 03:09:060860デフォルトの名無しさん
2005/10/07(金) 03:12:240861デフォルトの名無しさん
2005/10/07(金) 08:00:320862デフォルトの名無しさん
2005/10/07(金) 09:33:52Criteriaしてるし
0863デフォルトの名無しさん
2005/10/07(金) 09:48:030864デフォルトの名無しさん
2005/10/07(金) 10:26:330865デフォルトの名無しさん
2005/10/07(金) 11:21:030866デフォルトの名無しさん
2005/10/07(金) 11:23:49ワラタ
0867デフォルトの名無しさん
2005/10/07(金) 12:01:47空気読んでないし
0868デフォルトの名無しさん
2005/10/07(金) 12:41:00いや、スパムもブログの賑わいと言うし、一躍有名ブログ化はおいしいw
てか、獄長を起こした功績が大きい。久しぶりのJavaネタに俺様ウットリ。
海老の画像を全部アマゾンのアフィリンクに置き換えてJavaネタを書け
と言いたいw
0869デフォルトの名無しさん
2005/10/07(金) 19:05:190870デフォルトの名無しさん
2005/10/07(金) 20:28:29エビ「大人気ない」
エビ「その粘着ぶりは大人気ない」
koichik「おっ、クリテリアがいる」
エビ「人のハナシ聞いてないし…」
エビ「化粧してるし」
0871デフォルトの名無しさん
2005/10/07(金) 21:39:340872デフォルトの名無しさん
2005/10/07(金) 21:46:15首尾一貫というか、>>829に深く同意
0873デフォルトの名無しさん
2005/10/07(金) 21:53:28ありがとう、今気がついた・・・
0874デフォルトの名無しさん
2005/10/07(金) 23:30:39「Prologしてるし」
がいいな。
0875デフォルトの名無しさん
2005/10/08(土) 00:04:310876デフォルトの名無しさん
2005/10/08(土) 00:47:32大人気ないw
0877デフォルトの名無しさん
2005/10/08(土) 03:34:280878デフォルトの名無しさん
2005/10/08(土) 03:47:58ヒント:トラックバック
0879デフォルトの名無しさん
2005/10/08(土) 07:25:190880デフォルトの名無しさん
2005/10/08(土) 12:51:05あそこに取り上げられなければ( ´_ゝ`)フーンで終わったのに。
0881デフォルトの名無しさん
2005/10/08(土) 13:34:11ガンガン使いまくってるんですけど。
更新系の処理後は、たいがいリダイレクトしちゃうんで、
プレゼンテーション層ではDBからデータひろってきて表示するだけ。
どのみち別セッションだし、ガーッてセッション開きっぱなしです。
まずいの?
0882デフォルトの名無しさん
2005/10/08(土) 13:37:32・大口を叩く
・オレンジニュースに取り上げられる
・2chに晒される
・獄長に見つかる
・コテンパン
0883デフォルトの名無しさん
2005/10/08(土) 13:44:56まずいと思うならまずいし、思わないならまずくない。
作るものとか考え方によるんじゃない?
0884デフォルトの名無しさん
2005/10/08(土) 13:56:19> Open Session in View って、そんなに避けなきゃいけないものですか?
困ってなければいんじゃね?
> 更新系の処理後は、たいがいリダイレクトしちゃうんで、
こういうのってよくあるのか?
> プレゼンテーション層ではDBからデータひろってきて表示するだけ。
> どのみち別セッションだし、ガーッてセッション開きっぱなしです。
それだと更新とその結果表示で同じDBアクセスしたりしないのか?
0885デフォルトの名無しさん
2005/10/08(土) 14:04:58>> 更新系の処理後は、たいがいリダイレクトしちゃうんで、
>
>こういうのってよくあるのか?
Redirect after post とか Redirect after submit とかいうパターンです。
ttp://www.theserverside.com/articles/article.tss?l=RedirectAfterPost
ある程度F5よけになります。
>> プレゼンテーション層ではDBからデータひろってきて表示するだけ。
>> どのみち別セッションだし、ガーッてセッション開きっぱなしです。
>
> それだと更新とその結果表示で同じDBアクセスしたりしないのか?
アクセスします。
あきらかに無駄ですが、 redirect after submit するメリットを優先しています。
0886デフォルトの名無しさん
2005/10/08(土) 14:26:40> ある程度F5よけになります。
履歴上は全て表示系のURLになるわけか。
submitボタン連打にも有効?
> あきらかに無駄ですが、 redirect after submit するメリットを優先しています。
それだと俺んとこでは苦しいな。
0887デフォルトの名無しさん
2005/10/09(日) 19:09:57簡単に言うと、どういう処理方法なんですか?教えてエロい人
Hibernate のSessionを生成するコストってそんなに大きいだろうか。
Sessionの生存期間が長くなればなるほどいろんな問題を生まないだろうか。
オレのマグナムをてめぇの汚ぇケツにブチこんでションベンぶちまけてやるぜ。
自分はSessionを生成したらできるだけ速やかに閉じるようにしてます。
一回のrequest-responseループでSessionを使い棄てるようなイメージで。。
大きな問題には遭遇してないですよ。
0888デフォルトの名無しさん
2005/10/09(日) 20:53:59OpenSessionInViewとは直接関係ない話。
HTMLフォームをサブミットしたリクエストでDBを更新した後
表示用のURLにリダイレクトして、そのリクエストでDBを参照して
画面表示する。
そうするとブラウザでF5しても表示用のURLがリクエストされるから
二重更新を回避できるのがメリットみたいだな。
それぞれのリクエストでは別々のSessionを使う。
>881はたまたまそのSessionをOpenSessionInViewしてる。
0889デフォルトの名無しさん
2005/10/09(日) 23:07:24指定したテーブルが存在しないって言われちゃう。MiddlegenIDE(だっけ?)を使ってみても、対象の
テーブル一覧に何も出てこない。ネットで検索すると、同現象に遭遇してる人がちらほら居るんだけど
誰かMiddlegenでOracle用のマッピング作れてる人いる?
0890デフォルトの名無しさん
2005/10/10(月) 00:21:44スキーマ名指定の大文字/小文字の違いとか。
0891デフォルトの名無しさん
2005/10/11(火) 10:53:24Hibernate 2の頃にあったHibernateToolsにはあったんだけど、、消えて無くなった?
皆さんどうしてますー?
0892デフォルトの名無しさん
2005/10/11(火) 11:03:39>ibatisでstruts見たいに、#formbean.innerbean.fireld#みたいに指定できないですか?
普通にできてますけど・・・
失敗すんの?
0893デフォルトの名無しさん
2005/10/11(火) 11:36:54>808 参照。
というかここ参照
http://www.hibernate.org/hib_docs/tools/ant/index.html
オプションは使ったことないんでしらん
0894デフォルトの名無しさん
2005/10/11(火) 11:56:02ありがとうございます。えーと、Toolsはjarの中身から取り出して使ってます。
URLにあったantタスクの使い方の中に、2.*の時に使われていたconfigurationの設定とその使い方に関する記述が無いため
3.*になってどっか逝ってしまったかな…と思った次第です。
0895デフォルトの名無しさん
2005/10/13(木) 09:43:08あ!すいません。記述ミスでした。
#formbean.innerbean[0].fireld# です。
strutsやvelocityでは、[0]は配列でもリストでも可能でしたのでibatisでもと思ったのですが、
そんなメソッドはないといわれ、[0]をメソッド名としてみてしまいます。
iterateタグでも一部で切るのですが、配列の場合はだめでした。
0896デフォルトの名無しさん
2005/10/17(月) 17:30:27Hoge hoge = (Hoge)session.load(Hoge.class, primaryKey);
みたいな感じで取得出来るのですが、主キー以外のカラム値しか分からない場合、
Hogeのオブジェクトにそのカラムの値のみをセットして、DBから一致するデータ全てを
取得する方法はあったりするのでしょうか?
Hoge hoge = new Hoge();
hoge.setVal("aaa");
List list = session.何らかのメソッド(hoge);
みたいな感じで。
もし、こういうのが出来ない場合は、テーブルのカラム数に応じた処理を書かないと
いけないのでしょうか?
0897デフォルトの名無しさん
2005/10/17(月) 18:04:310899デフォルトの名無しさん
2005/10/24(月) 12:04:44今回の案件でHibernate使うか迷っててコレが出来れば使おうと思うんだけれど。
0900デフォルトの名無しさん
2005/10/24(月) 12:14:370901デフォルトの名無しさん
2005/10/24(月) 14:17:350902デフォルトの名無しさん
2005/10/24(月) 15:11:37お客様からコード洗替のお知らせが。とか。
0903デフォルトの名無しさん
2005/10/24(月) 16:23:500904デフォルトの名無しさん
2005/10/24(月) 19:11:51今更ながら更新されておる喃。
0905デフォルトの名無しさん
2005/10/24(月) 23:30:47キーなしテーブルとか出来上がっちゃったりすること多い
0906デフォルトの名無しさん
2005/10/24(月) 23:35:540907デフォルトの名無しさん
2005/10/25(火) 00:12:480908デフォルトの名無しさん
2005/10/25(火) 11:14:50updateするHQLを書けばイケるっぽかった
0909デフォルトの名無しさん
2005/10/25(火) 11:54:14Reader reader = Resources.getResourceAsReader(”設定ファイル”);
SqlMapClientBuilder.buildSqlMapClient(reader);
しているのですが、
一回実行し、設定ファイルを変更して、もう一度実行させても
設定ファイルの変更が更新されません。
修正した設定ファイルを毎回読込ますためにはどうしたらよいでしょうか。
0910デフォルトの名無しさん
2005/10/25(火) 13:59:46実は違う位置にある設定ファイルの内容を変更しているとか。
readerの中身をダンプして、本当に編集した物を読み込んでいるか確認してみては。
そもそも1回実行するごとに別のプロセスになるから、毎回読み込ませないほうが
難しいと思いますが(何か常駐してるとか)。
0911デフォルトの名無しさん
2005/10/31(月) 00:05:36>Hibernate3 + Java5 で、マッピングにEnum使えない様なんですが、あってますか?
先週からHibernateを学習し始めたのですが、3.1では使えるみたいですね。
UserTypeというインタフェースを実装して、EnumとDBのマッピング方法を
実装する必要があります。このページにあるGenericEnumUserTypeを流用
しても良いでしょう。
http://www.hibernate.org/272.html
0912デフォルトの名無しさん
2005/11/03(木) 00:54:52いろんな条件でもかなり柔軟に設定できます。
これ結構お勧めかも・・・
0913デフォルトの名無しさん
2005/11/03(木) 15:14:49<isNotNull>とかのDynamic SQL周りでしょうか。
複雑なSQLは書いてないのでiBatisでも気にはなりませんでしたが
具体的にはどういう感じになるのでしょうか。
0914デフォルトの名無しさん
2005/11/03(木) 20:11:26俺は >912 じゃないが、分岐とループの明快さだろ。
SQL のテンプレ問題は HTML の動的デザイン問題に
類似している部分がある。
ってかもう、SQL も JSTL を標準に(ry
0915デフォルトの名無しさん
2005/11/04(金) 17:04:45オレもibatis遣いなので興味津々。
どこかにsampleをうぷしてくれたら、今後あなたのいる方向に足を向けて寝ません。
0916デフォルトの名無しさん
2005/11/06(日) 01:29:27product_categoryというテーブルに、id,sub_id,name があって、id と sub_id が複合キーであったとします。(他のテーブルにも複合キーが至る所にあります)
middlegenを使うとcomposite-id タグへ自動的にid と sub_id がマッピングされ、hbm2javaを使ってPOJOを生成すると
〜〜〜PK.javaというクラスも生成されています。
このテーブルへデータを追加して保存をしようとすると、
org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): クラス名
とエラーが出ます。idとsub_idのうち、idはDB側のシーケンスを使って自動生成しています。sub_idもストアドを使って自動生成します。
この場合、hbmファイルはどのように記述すればよいでしょう?
アプリ側で〜〜PK.javaのインスタンスを生成してPostgreSQLからいちいちシーケンスなどの値を取得してインスタンスへセット……
なんてことしないとダメなんですか?
0917916
2005/11/06(日) 01:45:297.4 複合識別子としてのコンポーネント の部分で、
複合キーを生成するためにIdentifierGenerator を使用することができません。代わりにアプリケーションはそれ自身の識別子を割り当てなくてはなりません。
とありますた(;´д`) まぁ仕方ないか…お騒がせしました
0918デフォルトの名無しさん
2005/11/06(日) 01:50:06好きのようにIdentifierGeneratorを作れば大抵の場合幸せになる。
0919デフォルトの名無しさん
2005/11/07(月) 10:43:52select
条件1
name
条件2
age
の設定ファイルで、初回条件1で、2回目条件2だと、条件1が使用される仕様になっているようです。
キャッシュを無効にする方法知っていませんか。
0920デフォルトの名無しさん
2005/11/07(月) 17:10:13君の書いているのは例えば
<isNotEmpty prepend="and" property="employeeName">
EMPLOYEENAME like '$employeeName$%'
</isNotEmpty>
<isGreaterThan prepend="and" property="deptNo" compareValue="0">
DEPTNO = #deptNo#
</isGreaterThan>
こんな感じのソースのこと?
もしそうなら、オレの所ではキャシュされてる云々は発生してないけど・・・
も少し詳細な話と、『クエリーのキャッシュを使用するようで』の根拠を
書いてみて。
0921デフォルトの名無しさん
2005/11/08(火) 22:37:26CLASSPASSやjavaの実行時引数か何かでファイル名を指定することはできませぬか。
0922デフォルトの名無しさん
2005/11/08(火) 23:16:53http://www.hibernate.org/hib_docs/v3/api/org/hibernate/cfg/Configuration.html#configure(java.io.File)
0923デフォルトの名無しさん
2005/11/08(火) 23:24:46ありがd。自前で実装せにゃあかんのね。がんばってみる。
0924デフォルトの名無しさん
2005/11/11(金) 14:33:45<many-to-one name="fuga" unique="false" not-null="false" update="false" insert="false" column="fuga_id" />
と指定してもプロパティの値に相手が無いと
No row with the given identifier exists: [my.Fuga#1234]
とか怒られるんだが。
0925デフォルトの名無しさん
2005/11/11(金) 14:54:53one-to-oneでどーにかなりそうなふいんき、なんかキモいけど
0926デフォルトの名無しさん
2005/11/12(土) 00:33:56Hibernate3ならnot-found="ignore"
0927デフォルトの名無しさん
2005/11/16(水) 22:37:20Parent と Child が1対多結合してるときにHQLで
from Parent p where size(p.childs) = 0
とやると子供がいない親が抽出される(childrenじゃないのは気にするな)
しかし、orで条件を追加して
from Parent p
where
size(p.childs) = 0
or
p.childs.age = 13
とするとorなのになぜか13歳の子供を持つ親しか出てこなくなる
これは仕様だろうかバグだろうか?
0928デフォルトの名無しさん
2005/11/17(木) 00:58:040929デフォルトの名無しさん
2005/11/25(金) 02:15:130930デフォルトの名無しさん
2005/11/25(金) 02:52:20>Toplinkがオープンソースになった
マジで?本当ならうれしいなあ。
今Googleで検索したり、OTNを見たりしたけど、OpenSourceと書かれた
情報は見つけられなかったよ。どっかに情報ない?
0931デフォルトの名無しさん
2005/11/25(金) 04:40:34ひょっとして、
ttp://itpro.nikkeibp.co.jp/free/ITPro/OPINION/20050714/164660/
の
米Oracleは,EJB3.0のPersistence API(EJB3.0仕様の一部である
永続化機能だけを切り離し,O/Rマッパー仕様として利用できるように
した)を,同社のO/RマッパーTopLinkの上で実装し,オープンソース
としてProject GlassFish(後述)に提供すると発表。また,JSF
(JavaServer Faces)のオープンソース実装MyFacesのプロジェクトに
参加した。
という記述のことか?
0933デフォルトの名無しさん
2005/11/25(金) 11:35:07Oracle=>TopLink
BEA===>Kodo
JBoss=>Hibernate
で、
IBM===>???
IBMってどうするつもりなんだろうね。
まさかGeronimoで採用のOpenEJBに
開発陣をブチ込むとか?
0934デフォルトの名無しさん
2005/11/25(金) 12:20:37それ、TopLinkのオープンソース化じゃないんじゃないの?
0935デフォルトの名無しさん
2005/11/26(土) 01:22:46良く知らないんだけど....
EOFよりも良い?
0936デフォルトの名無しさん
2005/11/26(土) 02:10:29そのようですね。
TopLinkの一部は寄贈されるようですが、TopLinkは全然売り物のまま。
残念。
>>935
EOFは知らないけど、TopLinkは設定のGUIが楽で良い。
ただ、Oracleが買ったせいでOracle DBしかサポートしないことに
なっちゃってるのが他のDB使いたい人には問題だけど。
0937デフォルトの名無しさん
2005/11/27(日) 20:27:110938デフォルトの名無しさん
2005/11/30(水) 17:13:54貼っとく
http://www.ibm.com/jp/software/websphere/developer/ejb/guide/
0939デフォルトの名無しさん
2005/12/01(木) 02:38:490940929
2005/12/01(木) 04:04:400942デフォルトの名無しさん
2005/12/01(木) 08:48:24B バストみて
A あなたの
T ティンコから
I いっぱい
S 精子放出
どうもありがとうございました。
0943デフォルトの名無しさん
2005/12/01(木) 10:04:27本家に書いてあるぞ。これの一番下を嫁。
http://ibatis.apache.org/background.html
0944デフォルトの名無しさん
2005/12/01(木) 10:33:35大体質問に対してまともな回答がない時は、質問の仕方が糞か、誰も知らないか。
今回のように、少し調べれば分かるようなことを聞くとまともな回答は付かないだろうね。
0945デフォルトの名無しさん
2005/12/01(木) 11:16:28ぼくはアイバティスと読んでる
0947デフォルトの名無しさん
2005/12/03(土) 00:15:46JBossスレで、POJOの話をすると
刺客を送りつけられ殺し屋に暗殺されるということ
らしいが、なんでよ?
Hibernate使ってると暗殺されて行方不明扱いになっちまうのか?
0948デフォルトの名無しさん
2005/12/03(土) 00:29:04鮫島事件でぐぐれ。所詮その程度の話だ。
0949デフォルトの名無しさん
2005/12/04(日) 23:04:150950デフォルトの名無しさん
2005/12/05(月) 09:50:31できる。
まずはTutorial、Developer'sGuideの順に目を通せ。
0951デフォルトの名無しさん
2005/12/05(月) 19:28:08ドキュメント見るとnullの場合は自分が決めた値入れるの?
> <parameter property ="propertyName" [jdbcType="VARCHAR"] [javaType="String"]
> [nullValue="NUMERIC"] [null="-9999"]/>
<resultMaps>
<resultMap id="FooEntityResult" class="FooEntity">
<result property="FooCode" column="FooCode" />
<result property="FooName" column="FooName" />
<result property="HogeHogeFlg" column="HogeHogeFlg" />
<result property="CreateDate" column="CreateDate" />
<result property="UpdateDate" column="UpdateDate" />
</resultMap>
</resultMaps>
実は.netで開発してるんだけど資料が少なくて泣きそう。
javaの場合はどうやってるか参考にちょっと教えてもらえないかな?
0952デフォルトの名無しさん
2005/12/05(月) 22:50:13Super Thanks!
0953デフォルトの名無しさん
2005/12/06(火) 13:18:19DBのnull値はObjectの参照値nullになった気がするけど記憶に自信ないや。
ちょっと試してみてよ。(今ソースが手元にないのでゴメン)
余談だが、一ひねり必要なのは、いわゆる名称テーブルの行セットが
削除されてた時の関連Objectの対応かな。おれはSQLを
select
#employeeId# AS employeeId,
NVL(EMP.ENAME,'') AS employeeName
FROM DUAL
LEFT OUTER JOIN EMP ON EMP.EMPNO = #employeeId#
とやってしのいでいるけど、他のiBATIS遣いの方々はどうしてるの?
( OracleDialect丸出し失礼 )
0954デフォルトの名無しさん
2005/12/06(火) 16:13:54参照型であればnullになったはず。
問題はプリミティブ型の場合で、何も対処しないと例外になったはず。
なので、<result>にnullValue="false"(booleanの場合)を書きました。
0955デフォルトの名無しさん
2005/12/12(月) 23:33:41テーブルのカラムにdate[](配列)が定義されてんですけど
マッピング定義ファイルの書き方がわからんのです。
どなたかわかります?それとも無理なんでしょうか?
<property name="regularDate" type="java.util.Date[]">
<column name="regular_date"/>
</property>
0956デフォルトの名無しさん
2005/12/13(火) 12:46:320957デフォルトの名無しさん
2005/12/13(火) 23:05:090958デフォルトの名無しさん
2005/12/14(水) 21:08:18今回、Java⇔Oracleで、基幹システム(見積、受注、発注、出荷、在庫など)を
組むことになったのですが、
こういうのって意外と顧客独自な複雑な仕様があるので、テーブルもすごい何十個とかあります。
全てのテーブルのMappinngクラスを作ったりするもんなんですか?
複数テーブルとリレーション組んだりする時もその都度Mappinngクラス作るんですか?
なんか、結局SQL文コードに埋め込む形になっちゃいそうなんですが・・・
実際どうなんでしょうか?
0959デフォルトの名無しさん
2005/12/14(水) 21:40:04マッピングクラスなんか自動で作ってくれるツールがあるわけだから、ケチらず全部作れば?
0960デフォルトの名無しさん
2005/12/14(水) 21:43:45ORマッピング使ったからといって、全部SQL使わずにやるわけじゃないし。
0961デフォルトの名無しさん
2005/12/14(水) 23:19:320962デフォルトの名無しさん
2005/12/14(水) 23:54:48EJB3のRI
0963958
2005/12/15(木) 09:27:28>>959-960
本当にマッピングが、仕様の変更に迅速に対応できるのか、
マッピングとSQLの混在で、中途半端にならないか
という事が不安です。
逆に、こういう時はマッピングで、この時は、SQLとかいう
推奨の取り決めなどあるのでしょうか?
>>961-962
DB2やpostgreSqlも視野に入れてるので今回は使わない予定です。
0964デフォルトの名無しさん
2005/12/15(木) 09:48:56既存のDBを使わなくてはならい。そのDBがまんまOOにするには設計的に向いてない。
慣れないORMより目に見えるSQL。そんな君ならiBATISはどうだ?
PreparedStatementより遥かに楽だぞ。
http://ibatis.apache.org/
0965964
2005/12/15(木) 09:56:21つまりOracleDB以外でもOKなオプソになる。
GlassFishでぐぐってみて。
0966デフォルトの名無しさん
2005/12/15(木) 12:41:24> 逆に、こういう時はマッピングで、この時は、SQLとかいう
> 推奨の取り決めなどあるのでしょうか?
1件単位の処理はマッピング
複数レコード一括処理はSQL
抽出はxQL
0967958
2005/12/15(木) 14:10:25iBATISいいですね、SQL部分とロジックを分けれるので、管理も楽そうです。
>>965
TopLinkとGlassFishは、調査中です。難しそうですね・・・
>>966
>複数レコードの一括処理
ってのは、いわゆるバッチ系でしょうか?
0968デフォルトの名無しさん
2005/12/15(木) 14:26:300969デフォルトの名無しさん
2005/12/15(木) 15:18:38たとえば、ある10件のデータを持ったテーブルの内容を画面に表示したいってのは
複数レコードの一括処理に入りますか?
0970デフォルトの名無しさん
2005/12/15(木) 16:03:45入らない。
けど、select書く。
0972デフォルトの名無しさん
2005/12/15(木) 16:16:04iBATISはSpringと組み合わせると、なお楽チンにソース書ける。
Spring提供の 『 iBATIS用お助けAbstractClass 』 を継承する形。
さすればカッタルイお決まりソース部分は親クラスがやってくれる。
iBATISのライバルに位置するものとしては、
S2DAO、SpringJDBCが存在する。
0973デフォルトの名無しさん
2005/12/15(木) 18:05:340974デフォルトの名無しさん
2005/12/15(木) 21:32:28DbUnitはO-Rマッピングと世界が違って
どうも何か違和感を感じるんだけど
0975デフォルトの名無しさん
2005/12/15(木) 22:18:51構文上selectを省略できるという意味?
0976デフォルトの名無しさん
2005/12/15(木) 23:42:46SQLのSELECT文の事です
0977デフォルトの名無しさん
2005/12/16(金) 00:27:29あとはHQLだった。
0978デフォルトの名無しさん
2005/12/16(金) 00:29:56結合の制御もできないしね。
「select」はほとんど省略したけど、HQLを使った。
今ならprojectionが導入されたからクライテリアを使うかもしれない。
0979デフォルトの名無しさん
2005/12/16(金) 06:48:19WHERE句も指定できるようにならないかな
0980デフォルトの名無しさん
2005/12/16(金) 07:43:160981デフォルトの名無しさん
2005/12/16(金) 10:02:590982デフォルトの名無しさん
2005/12/16(金) 10:12:42たとえば、得意先マスターだったら、今までは、
テーブル名:CUSTOMER
フィールド名:CUSTOMER_NAME
なんですけど、
マッピングを自動生成させると、
getCustomer_Nameっていうプロパティ名が生成されて気持ち悪いんですけど・・・
やっぱり、getCustomerNameであってほしいのですが、皆さんはどうしてますか?
データベースの推奨では、CUSTOMER_CODEとかアンダーバーで区切りなさいって良く聞くのですが・・・
0983982
2005/12/16(金) 10:22:35customer_nameは、
getCustomerNameにしてくれました・・・
アンダーバーを使おうと思います
0984デフォルトの名無しさん
2005/12/16(金) 12:13:06Java⇔RDBのMapping-Frameworkを語るスレ Vol.4
ttp://pc8.2ch.net/test/read.cgi/tech/1134701684/
0985デフォルトの名無しさん
2005/12/16(金) 17:56:01オイラもそこは気になってるage
0986デフォルトの名無しさん
2005/12/16(金) 18:17:26ORマッピングって流行ってるの?
0987デフォルトの名無しさん
2005/12/16(金) 20:58:03listを出そうとするとエラーになる。
そのままtoString()で出してほしいのですが。
0988デフォルトの名無しさん
2005/12/16(金) 21:03:580989デフォルトの名無しさん
2005/12/17(土) 11:39:11hibernateって複合プライマリキーのテーブルの扱いがへんでねえか?
0990デフォルトの名無しさん
2005/12/17(土) 13:45:38村社会と比べたら全然モヒカン族の方が好意的だよ。
モヒカン族はテクノクラシー(技術至上主義)
村社会は社会主義社会、北朝鮮的。昔のnifty時代によく見られた
その名残としてブログや2chが出るまでは
閉鎖的な掲示板で村社会的なものがよく見られた。まさに洗脳に近い。
モヒカン族は人を洗脳しない。つっこみは入れるが意見を受け容れる
まさにアメリカ的民主主義。
0991デフォルトの名無しさん
2005/12/17(土) 16:02:35複合プライマリーキーをフィールドに持つIDクラスで管理する。
IDクラスはequals()とhashcode()をオーバーライドする必要があるが、Hibernate Toolsを使えば自動でやってくれる。
こんなかんじなんだけど、どう変なの?
0992デフォルトの名無しさん
2005/12/23(金) 11:57:14Webアプリにはむかねえと思った
0993デフォルトの名無しさん
2005/12/23(金) 11:59:31なぜ?
0994デフォルトの名無しさん
2005/12/23(金) 12:06:57わかんね
カン
0995デフォルトの名無しさん
2005/12/23(金) 12:13:44つOpen Session In View
0996デフォルトの名無しさん
2005/12/23(金) 12:49:54HQLでJOINで取れば?
0997デフォルトの名無しさん
2005/12/23(金) 19:26:350998デフォルトの名無しさん
2005/12/24(土) 00:18:440999デフォルトの名無しさん
2005/12/24(土) 00:19:041000デフォルトの名無しさん
2005/12/24(土) 00:19:2210011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。