Java⇔RDBのMapping-Frameworkを語るスレ Vol.4
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2005/12/16(金) 11:54:44Java⇔RDBのMapping-Frameworkを語るThre Vol.3
ttp://pc8.2ch.net/test/read.cgi/tech/1090653286/
過去スレ:
「Java⇔RDBのMapping-Frameworkを語るスレ Vol.2」(落ち)
ttp://pc5.2ch.net/test/read.cgi/tech/1086315004/
「Java⇔RDBのMapping-Frameworkを語るスレ」(落ち)
ttp://pc5.2ch.net/test/read.cgi/tech/1049030272/
●まずは、基礎知識と技術選択指針など
[The Fundamentals of Mapping Objects to Relational Databases]
(RDBに対するオブジェクトマッピングの基礎(英語))
ttp://www.agiledata.org/essays/mappingObjects.html
[O/R-Mappingツールの比較サイト(英語)]
ttp://c2.com/cgi-bin/wiki?ObjectRelationalToolComparison
[Catalog of Patterns of Enterprise Application Architecture (PoEAA)]
ttp://www.martinfowler.com/eaaCatalog/
あとは>>2以降
0002デフォルトの名無しさん
2005/12/16(金) 11:56:080003デフォルトの名無しさん
2005/12/16(金) 11:57:05[HYBERNATE]
ttp://www.hibernate.org/
[Cayenne]
ttp://objectstyle.org/cayenne/
[Torque]
ttp://db.apache.org/torque/
[iBATIS - SQL Maps]
ttp://ibatis.apache.org/
[Java Ultra-Lite Persistence (JULP)]
ttp://julp.sourceforge.net/index.html
[Jakarta Commons DbUtils](O/R-Mappingというよりは、O/R-Bridge)
ttp://jakarta.apache.org/commons/dbutils/
[Amber - Lightweight Java R/O Mapping Framework]
ttp://sourceforge.net/projects/amber-db
●その他関連情報・ツール
[JoSQL]
JavaオブジェクトをSQLで操作
ttp://josql.sourceforge.net/
[SQL Generator]
Javaでお手軽かつ動的にSQLを生成する
ttp://sourceforge.jp/projects/sql-generator/
0004デフォルトの名無しさん
2005/12/16(金) 12:12:38ノシ
0005デフォルトの名無しさん
2005/12/16(金) 13:09:16[GlassFish / EJB3.0 ReferenceImplemention ]
https://glassfish.dev.java.net/
0006デフォルトの名無しさん
2005/12/16(金) 20:53:47[S2Dao]
ttp://www.seasar.org/s2dao.html
0007デフォルトの名無しさん
2005/12/16(金) 21:29:39今回、Java⇔Oracleで、基幹システム(見積、受注、発注、出荷、在庫など)を
組むことになったのですが、
こういうのって意外と顧客独自な複雑な仕様があるので、テーブルもすごい何十個とかあります。
全てのテーブルのMappinngクラスを作ったりするもんなんですか?
複数テーブルとリレーション組んだりする時もその都度Mappinngクラス作るんですか?
なんか、結局SQL文コードに埋め込む形になっちゃいそうなんですが・・・
実際どうなんでしょうか?
0008デフォルトの名無しさん
2005/12/17(土) 01:01:54通常は、クラスを自動生成したりするツールがあるので、テーブルの数はあまり問題じゃない。
問題は、顧客独自な複雑な仕様のほうだろ。それがO/Rマッパーでサポートできるかどうか。
というか、O/Rマッパー使うときは、O/Rマッパーを使うという前提でテーブル設計しないとつらいことが多い。
一般には、楽できるO/Rマッパーほどテーブル設計の自由度が低く、逆に自由度が高いO/Rマッパーだとあんまり楽にならない。
>複数テーブルとリレーション組んだりする時もその都度Mappinngクラス作るんですか?
O/Rマッパーによる。
0009デフォルトの名無しさん
2005/12/17(土) 10:32:02.NETだったが、O/Rマッパーして、自動生成されたクラスがあるのに、
実際は、そのまま。SQL発行して、レコードセットみたいなものを使って取得してたりしてた。
こういのだけは、カンベン
0010デフォルトの名無しさん
2005/12/22(木) 21:23:100011デフォルトの名無しさん
2005/12/23(金) 17:56:040012デフォルトの名無しさん
2005/12/23(金) 22:33:390013デフォルトの名無しさん
2005/12/24(土) 10:20:18http://hp.vector.co.jp/authors/VA027994/blanco/blanco.html
これもここでいいのかな?
使った人レビューなぞきぼんぬ。
0014デフォルトの名無しさん
2005/12/24(土) 11:00:27基幹システムって時点でテーブル何十個じゃすまないだろう。
基幹システム作った経験無ければ、パッケージに品。
0015デフォルトの名無しさん
2005/12/24(土) 13:55:50INSERT INTO HOGE(HOGE1, HOGE2, INSERT_DATE) VALUES (?, ?, CURRENT_TIMESTAMP)
のようなSQL文をpersistで作らせるのは無理でしょうか?
0016デフォルトの名無しさん
2005/12/25(日) 01:11:14複合キーでER設計するか?
楽観排他制御をサポートしているか?
ネイティブのSQLを使うか?
今んとこ、Hibernateがもっともトラブルが少ないね。俺のプロジェクトでは。
0017デフォルトの名無しさん
2005/12/25(日) 13:04:36未踏のやつ。
0018デフォルトの名無しさん
2005/12/25(日) 21:41:07これをOracle10gに移行しようとしています。
MySQLではPKを自動インクリメントで取得していますが、
Oracleではシーケンスになるので、
MySQLで
<generator class="identity" />
ってなってるところを
<generator class="sequence">
<param name="sequence">シーケンス名</param>
</generator>
としてやればよいのでしょうか?
0019デフォルトの名無しさん
2005/12/28(水) 02:11:48http://www.amazon.co.jp/exec/obidos/ASIN/4797330805/
ついに出るねぇ。
英語読めない俺としては嬉しい限り。
0020デフォルトの名無しさん
2005/12/28(水) 03:50:24原著が出たのは結構前なので、やっぱりHIBERNATE 2.xベースの解説なのかな。
3.xへの補足も入っているとうれしいんだけど。
0021デフォルトの名無しさん
2005/12/28(水) 18:27:04sqlmapのflushDataCache()メソッドを使用したのですが
キャッシュが消えずに、2回目のsqlでエラーになってしまいました。
キャッシュを削除する方法はないでしょうか?
0022デフォルトの名無しさん
2005/12/28(水) 20:26:14selectの抽出項目を条件により動的に変更する、を言っているの?
どうやらibatisではだめなようだね。
rezultクラスをHashMapにしても、最初のクエリーの項目が残り、
次回のクエリーで、初回の項目と違うとエラーになります。
Builderで再ビルドすれば、全てクリアできるので問題なし。
1クエリごとに生成するので大変だが・・・
0023デフォルトの名無しさん
2005/12/28(水) 20:43:130024デフォルトの名無しさん
2006/01/01(日) 09:17:49remapResultsのことかな?
0025デフォルトの名無しさん
2006/01/05(木) 10:55:27remapResultとはどのようなことでしょうか。
名前から推測すると、多分その設定によるものだと思います。
ちょっと調べてみます。
0026デフォルトの名無しさん
2006/01/05(木) 13:52:45<select id="select_query" remapResults="true">
$query$
</select>
と書いて実行しましたが、XML Parser Error. になりました。ibatisはバージョン2です。
下記を参考にしてみました。
ttp://www.mail-archive.com/[email protected]/msg00225.html
0027デフォルトの名無しさん
2006/01/05(木) 14:52:44どこでパースエラーになってるんでしょう?
ちなみに、dtdはttp://www.ibatis.com/dtd/sql-map-2.dtdとおなじものですよね?
0028デフォルトの名無しさん
2006/01/05(木) 14:57:54ああ、バージョンは2.0.9以降じゃないとダメみたいで。
0029デフォルトの名無しさん
2006/01/05(木) 20:01:06一番メンテナンスしやすい(修正のほとんどが設定ファイルなど)のは
ダントツでibatisで間違いなし???
0030デフォルトの名無しさん
2006/01/05(木) 22:47:01ただし既存のテーブルには弱いが。
0031デフォルトの名無しさん
2006/01/05(木) 23:33:040032デフォルトの名無しさん
2006/01/06(金) 09:27:33カナ〜リ大きなXMLを管理する覚悟は必要。特にテーブルの数が多い時。
0033デフォルトの名無しさん
2006/01/06(金) 09:52:14sqlはすばらしい言語なので、プログラムではsqlのすばらしさを邪魔しないフレームワークが
一番賢いと考えています。
つまり、sqlで対応できるところは、ロジックではなくsqlを修正する。
そのsqlの修正は、設定ファイル内のsqlそのものだけ、が一番よいと思います。
そのほうがsqlとjavaの特徴を最大限に引き出せるし、メンテが楽です。
俺は簡単かどうかに関係なく、クラスの数が多いのは好きではないです。
マッピング処理の為にクラスを作成するのは納得できないです。それが自動生成できるものだとしても。
いろいろなマッピングツールを見ましたが、特にEJBはひどいと思いました。簡単なことを複雑に考えようとしているし。
クエリの結果データをbeanにマッピングするたびにクラスを生成するツールは好ましいと思いません。
どうでしょうか、この意見
0034デフォルトの名無しさん
2006/01/06(金) 09:59:10この仮定に同意できない。
0035デフォルトの名無しさん
2006/01/06(金) 10:18:16リレーショナルデータベースさわるのにはとてもいいと思う。
リレーショナルモデルもきっちり作りこまれてるので、かなりいい。
>>33
> 特にEJBはひどいと思いました。
EJB2までの話。
> マッピングするたびにクラスを生成する
クラスは生成せんだろ。
型保証とIDEによる補完を考えると、Javaの場合はテーブルに対応するクラスがあったほうが楽だしメリットも大きいと思われ。
SQLの外だしにこだわるなら、HibernateやEJB使うときでも外出しにすればいい。
0036デフォルトの名無しさん
2006/01/06(金) 10:37:14ドメインモデルの設計をビシィとやる。もちろんその時は
RDBMSの存在など微塵も意識しない。
さて実装を考える段になって、既存のRDBMSの設計を
見ると、ドメインモデルと合致しない。
俺はiBATISが本領を発揮するのはこういう時だと思う。
だから、
>マッピング処理の為にクラスを作成するのは納得できないです。
もしこれが『DB設計にクラス設計が影響されるのは納得できん』
ということなら君の意見に賛成する。
iBATISはDBとOOのミスマッチをSQLで吸収可能だからね。
0037デフォルトの名無しさん
2006/01/06(金) 10:38:09HibernateやEJB3って、ibatisみたいにsqlをかけるのでしょうか。
独自のSQLだと思っていたのですが。古い情報ですか。
0038デフォルトの名無しさん
2006/01/06(金) 10:49:03まさにその通りです。
sqlとjavaクラスの間に物理的な依存性を持たせるのは危険だと思いっています。
その依存性を切り離すのがまさにibatisなのかなぁと。
sqlそのものの結果をクラスに好きなようにマッピングできるのですから、すごい。
というか、ibatisが普通の考え方だと思うんですよね。
なんか、javaはより難しく考える傾向にあるような・・・・。
0039デフォルトの名無しさん
2006/01/06(金) 11:00:13ただibatisのSQL設定ファイルはいわばテンプレートなんだがその能力が低い。
リストや配列のプロパティで、そのままtoString()を呼んでDBに登録したいがエラーになる。
前のレスにあったけど、velocityみたいなテンプレート機能があるといいけど。
それに、qつのクエリのマッピングが一つのオブジェクトしか対象にできないのが痛い。
0040デフォルトの名無しさん
2006/01/06(金) 22:04:16かけるよ。
0041デフォルトの名無しさん
2006/01/09(月) 19:25:17リバースエンジニアリングしてくれて、勝手に作ってくれたりします?
0042デフォルトの名無しさん
2006/01/09(月) 20:11:58S2DaoMaker
0043デフォルトの名無しさん
2006/01/09(月) 20:25:160044デフォルトの名無しさん
2006/01/09(月) 21:52:180045デフォルトの名無しさん
2006/01/10(火) 10:10:07eclipseのpluginらしいのだけど。。。
0046デフォルトの名無しさん
2006/01/10(火) 11:04:00velocityみたいに、sqlmapの中で使えるtoolがほしい・・・
0047デフォルトの名無しさん
2006/01/10(火) 11:54:09Beanの中にあるHashMapにデータをセットすると、そんなフィールドないとのエラーになります。
エラーを見ると、対象がHashMapなのに、setプロパティ名を探しに行っているみたいです。
HashMapをDynaBeanに変えてもだめでした。
これは仕様でしょうか。
気になるのが、queryForObjectではなく、
SqlMapClientBuilder.buildSqlMapClient(reader);でエラーになります。
エラー
Cause: com.ibatis.common.beans.ProbeException: There is no WRITEABLE property named 'test' in class 'java.util.HashMap'
sqlMap
<resultMap id="user" class="ibatis.User">
<result property="hashMap.test" column="HASHMAP_TEST" />
</resultMap>
<select id="select_hash" resultMap="user" >
select
'ssss' as HASHMAP_TEST
from dual
</select>
クラス
public class User {
private HashMap hashMap = new HashMap();
・
public class User {
private DynaActionForm hashMap = new DynaActionForm();
・
0048デフォルトの名無しさん
2006/01/10(火) 17:09:54無謀でしょうか・・・
<iterate prepend="WHERE" property="data" open=" ID IN (" close=")" conjunction="," >
<isEqual property="#data[]#" compareValue="1">
#data[]#
</isEqual>
</iterate>
0049デフォルトの名無しさん
2006/01/10(火) 18:36:39HashMapに設定可能というのは、
resultMapのclassにHashMapを使える
というのであって、
HashMap型のプロパティに値を設定できる
訳ではないのではないかという気がします。
0050デフォルトの名無しさん
2006/01/10(火) 18:39:54自分で試したわけではないけど、こういうページがありました。
ttp://www.mail-archive.com/[email protected]/msg00854.html
<iterate>の内側のプロパティ名はそのまま渡しているみたいです。
0051デフォルトの名無しさん
2006/01/10(火) 19:04:38>>50
ありがとうございます。
再度修正して実行してみます。
0052デフォルトの名無しさん
2006/01/21(土) 17:14:07テーブルAの主キー:A_ID、
テーブルBの主キー:B_ID、A_ID(複合キー)
という場合、テーブルBに対応するクラスBとそのマッピングファイルってどう書けばいいですか?
複合キーの一部が外部キーの場合にどう書いたらいいのか分からなくって・・・・・・。
0053デフォルトの名無しさん
2006/01/25(水) 21:50:39入れ子のiteratorのpropertyのインデックスを指定しないと動作しないです。
0054デフォルトの名無しさん
2006/01/27(金) 08:41:26HSQLDBのテストテーブルがちょうどそんな形になってる。
Hibernate Toolsにhbm.xmlを自動作成させたらこうなった。
<composite-id name="id" class="test.entity.ItemId">
<key-property name="invoiceid" type="integer">
<column name="INVOICEID" />
</key-property>
<key-property name="item" type="integer">
<column name="ITEM" />
</key-property>
</composite-id>
<many-to-one name="invoice" class="test.entity.Invoice" update="false" insert="false" fetch="select">
<column name="INVOICEID" not-null="true" />
</many-to-one>
0055デフォルトの名無しさん
2006/01/27(金) 10:22:32他がLOCK TABLEしている時にHibernate側でupdateしようとすると、他が
コミットされるまで、止まってしまいます。
0056デフォルトの名無しさん
2006/01/27(金) 22:12:52使えるDBは限られるけどorg.hibernate.Session#lock()に
LockMode#UPGRADE_NOWAITを指定すれば出来ると思われ。
ただし、他のトランザクションのロックをポーリングしたいって場合は、
設計の方に問題がある可能性がかなり高い。っつーか、ほとんど禁じ手。
トランザクションはユーザー入力を介在させずに短時間で完了させるべし。
0057デフォルトの名無しさん
2006/01/27(金) 23:41:50レスありがとうございます。
そのマッピングだと、複合キークラスが
class ItemId {
private Integer invoiceid;
private integer item;
}
で、ItemクラスのフィールドにItemIdクラスとInvoiceクラスのフィールドを定義する、
って感じで合ってますか?
0058デフォルトの名無しさん
2006/01/28(土) 02:35:28合ってる。クラスもそのように自動作成された。
Hibernate in Actionに載ってたけど、many-to-oneタグのupdateとinsertをfalseにすることが重要みたい
0059デフォルトの名無しさん
2006/01/29(日) 00:02:02ありがとうございます!
やってみます。
ちなみに、参考までに伺いたいのですが、Hibernate Toolsの自動生成のマッピングの品質(?)ってどうなんですか?
本とかネットでも手動でマッピング定義の解説が多いような気がするので、
もしかしたら、手動でマッピングしないとパフォーマンスに問題があるとか、
複雑なテーブルはマップできないとか、そういう事情でもあるのかな?って思って。
0060デフォルトの名無しさん
2006/01/29(日) 10:08:35DBスキーマからマッピングファイルを作るのは、以前はMiddlegenを使うことが多かったみたい
本や雑誌の説明等にも、Middlegenの使い方がよく説明されている。
今のHibernate側の方針は、スキーマからマッピングファイル、永続化クラスの作成まで
Hibernate Toolsに全部任せようとしてるように見える
実際使ってみた印象は、テーブルが大量にある場合はとても便利だと思う。
特に複合主キーを使ってる場合は、主キークラスを自動で作ってくれるのがありがたい。
テーブルに外部キー制約をつけておけば、自動的にone-to-oneやmany-to-one等の関連定義もやってくれる。
反面、フィールドの型の定義がちょっと微妙で、char型やbyte、short、boolean型等を積極的に使ってくる。
プリミティブ型とラッパーオブジェクトの区別が曖昧。「not nullカラムのときはプリミティブ型」のように定義してほしかった。
また、TIMESTAMP型に対してjava.util.Dateを定義してしまうので、TIMESTAMPをversion管理に使いたいときは修正が必要。
テーブル名やカラム名にアンダーバーが入ってるときは、アンダーバーを自動的に排除してクラス、フィールドの名前を作成し
マッピングファイルのカラム名定義でマッピングしてくれる。
しかし、いちいちマッピングファイルに書くぐらいなら、NamingStrategyで定義した方がいいと思うので
あまりうれしくなかったりする。
結局、手で作るより便利なのは間違いないが、出来たファイルやクラスを一通りチェックする作業は必要だと思う。
Toolのカスタマイズ方法があまりわかってないので、もしかしたらもっと便利に使えるかも?
0061デフォルトの名無しさん
2006/01/31(火) 00:42:23なるほど!
チェック作業は入るとしても、全部手書きよりは断然効率良さそうですね。
是非使ってみたいと思います。
いろいろとありがとうございました!
0062デフォルトの名無しさん
2006/01/31(火) 11:34:03ファイルエンコードが指定出来ず苦労した記憶が・・・
(UTF-8のプロジェクトで使うのにMS932でしか生成できず)
さすがにもう改善されたのかな?
0063デフォルトの名無しさん
2006/01/31(火) 17:51:14many-to-manyカラムを生成する方法をご存じの方がいたら、教えてください。
0064デフォルトの名無しさん
2006/02/02(木) 23:54:22表示するのってどうやるんですか?
show_sqlだとインデントまではしてくれないですよね。。。
0065デフォルトの名無しさん
2006/02/03(金) 03:34:10つ hibernate.format_sql
0066デフォルトの名無しさん
2006/02/03(金) 21:50:00Thanks a lot!
0067デフォルトの名無しさん
2006/02/08(水) 02:14:460068デフォルトの名無しさん
2006/02/08(水) 12:50:300069デフォルトの名無しさん
2006/02/08(水) 14:27:01素直にADO.NET使った方がよさげ
0070デフォルトの名無しさん
2006/02/09(木) 00:57:250071デフォルトの名無しさん
2006/02/09(木) 08:04:25他でも時々そういう意見目にするんだけど、
NHibernateよりADO.NET使う方がいい理由ってなんなの?
なんかはっきりとADO.NETの方がいい!!って理由あんのかなぁ?
0072デフォルトの名無しさん
2006/02/09(木) 09:03:23つかスレ違い
0073デフォルトの名無しさん
2006/02/09(木) 09:05:57ツールのサポート
情報の量
人の量
0074デフォルトの名無しさん
2006/02/10(金) 11:31:03ttp://canetrash.seesaa.net/article/2778499.html
0075デフォルトの名無しさん
2006/02/11(土) 21:36:140076デフォルトの名無しさん
2006/02/11(土) 22:03:120077デフォルトの名無しさん
2006/02/12(日) 10:24:46実力は大きく変わらないが、Viewまで含めて.NETの機能が練られているところだろう。
いくらDAOのコーディング量が減っても、部分最適にしかならないから工数が減らない。
0078デフォルトの名無しさん
2006/02/12(日) 15:35:390079デフォルトの名無しさん
2006/02/12(日) 16:26:540080デフォルトの名無しさん
2006/02/12(日) 16:29:220081デフォルトの名無しさん
2006/02/12(日) 21:59:440082デフォルトの名無しさん
2006/02/13(月) 13:52:52それをいうと「寄せ集めと大差ないクオリティのXXX(値は各自の信仰に依存)って何よ?」って話になるからやめれw
0083デフォルトの名無しさん
2006/02/13(月) 17:48:53なんかeclipse VS netBeans(あるいはvisualStudio)の
議論を見てるみたい。目的目標出さずに道具の議論って
あんま意味ないよ。
0084デフォルトの名無しさん
2006/02/14(火) 02:34:07各ページに必要なデータだけをDBからロードするようにしたいんだけど
この場合はどうやればいいんだ?
当方Hibernate3を使用してます。
0085デフォルトの名無しさん
2006/02/14(火) 08:09:30ttp://www.hibernate.org/hib_docs/v3/reference/en/html/objectstate.html#objectstate-querying-executing-pagination
0086デフォルトの名無しさん
2006/02/15(水) 15:57:21many-to-one のマップで、もし該当データが存在しなくても怒られない方法、
知りませんか?
例えば
<class name="item">
<id name="id"/>
<many-to-one name="bid"/>
</class>
<class name="bid">
<id name="id"/>
<pro name="amount"/>
</class>
これで
from Item item left join fetch item.bid をやって、
取得したリストを表示させると、bidを取得できなかったitemの
item.bid.amountをgetすると、
LazyInitializ E org.hibernate.LazyInitializationException TRAS0014I: 次の例外がログに記録されました。 org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed
と、アボンです。
session閉じて分離オブジェクトになってんだから、良いじゃん、
と思うんだけど、教えて下され。
0087デフォルトの名無しさん
2006/02/15(水) 21:46:000088デフォルトの名無しさん
2006/02/16(木) 08:24:05あと、JBoss CacheをOracleがどう使うのか気になるな
0089デフォルトの名無しさん
2006/02/16(木) 17:30:070090デフォルトの名無しさん
2006/02/16(木) 19:03:37TopLinkの「放出されていない部分」っていうと、現状JDeveloperに
載ってるGUIツールの部分や分散環境対応部分が大きいのだっけ?
oc4jとJBossコンテナはどう棲み分けるのかなぁ、Oracleって
GlassFishも支援してるから、まるでOracle一つの内で三つ巴に
なってるみたいなイメージだね。
買収成功祈る>Oracle
0091デフォルトの名無しさん
2006/02/17(金) 01:52:07http://pcweb.mycom.co.jp/news/2006/02/15/344.html
0092デフォルトの名無しさん
2006/02/17(金) 02:58:08persistence.xmlはどこにおけばいい?
アプリルート/META-INF に置いても読み込めません・・・orz
Persistence.createEntityManagerFactory("em1");
でコケます。
No Persistence provider for EntityManager named em1
とスタックトレースに出力されます。
("em1"はpsersistence.xmlの<persistence-unit>要素のname属性に指定した名前)
WEB-INF/classesに置いてみても同じです。
Ejb3Configurationを使ってhibernate.cfg.xmlを読み込んでEntityManagerFactoryを
作る方法は成功しました。
環境はJDK1.5.0/Tomcat5.5.15/Hibernate3.1.2/hibernate-entitymanager-3.1beta6 です。
0093デフォルトの名無しさん
2006/02/17(金) 03:45:200094デフォルトの名無しさん
2006/02/17(金) 04:08:23スミマセン。
> WEB-INF/classesに置いてみても同じです。
と書いたように、他にはWEB-INF/classesも試しています。
0095デフォルトの名無しさん
2006/02/17(金) 07:28:25WEB-INF/classes/META-INF/persistence.xml
classpath内の「META-INF/persistence.xml」を検索しているみたい
WARのMETA-INFに入れても認識しないので注意
0096デフォルトの名無しさん
2006/02/17(金) 08:04:49うぉぉぉぉぉ!!!!!
激しくサンクスっ!
うごきましたー!
0097デフォルトの名無しさん
2006/02/26(日) 16:58:56発生しました。
loadAllだと問題なく抽出されるし、クラス名もちゃんとフルパスで指定
してるんですが、何が間違ってるんでしょうか。
0098デフォルトの名無しさん
2006/02/28(火) 23:35:35さすがに、HibernateとSpringのバージョンくらいは書いた方が良いのでは・・・?
0099デフォルトの名無しさん
2006/03/01(水) 01:32:48spring1.2.6とhibernate3です。
0100デフォルトの名無しさん
2006/03/01(水) 17:14:08<version name="version" unsaved-value="negative"/>
を記述して、バージョン管理をしていますが、このバージョンを
上げずに更新をするという処理は可能なのでしょうか。
一般的にはこのような処理は行わないと思いますが、2つのシステム
で同じテーブルを読みに行くとき、他方のシステムは特定のカラムを
更新された場合、更新の検知は不要と考えており、上記のような処理
ができないかと考えました。
0101デフォルトの名無しさん
2006/03/01(水) 23:30:21細かい粒度でクラスを書き、<component> でマッピングしましょう。
とかベストプラクティスに書いてあるから、Aシステムで更新するカラムと
Bシステムで更新するカラムを別クラス(1テーブル)にしたら?
とかいってみちゃったりして。
僕は上記の方法をとらないときはからなずバージョンによるロックかけるよ。
0102デフォルトの名無しさん
2006/03/02(木) 01:04:51排他制御はしないの?
0103デフォルトの名無しさん
2006/03/02(木) 08:23:29ありがとうございます。
二つのクラスにしてみます。
>> 102
テーブルtにf1,f2,vというカラムがあって、
vがバージョン番号だとすると、Aシステムは、
f1,f2を更新する可能性があって、Bシステムは、
f1のみ更新します。
f1を更新した際は、システムA,B共にf3を更新します。
ですから、Aシステムがf2のみを更新する際は、
排他制御は必要ないと考えたのですが、いかがでしょうか?
0104デフォルトの名無しさん
2006/03/02(木) 11:03:141)Bシステム:データ取得(f1=a,f2=b,v=1)
2)Aシステム:データ取得(f1=a,f2=b,v=1)
3)Bシステム:データ保存(f1=a→y,f2=b,v=1→2)
4)Aシステム:データ保存(f1=a,f2=b→x,v=1)
排他制御死ぬほど必要じゃね?
3)がせっかく入力したf1はどこいくんだ?
0105デフォルトの名無しさん
2006/03/02(木) 11:06:55100よ!私101だが、俺てっきりAシステムはf1のみ更新、Bシステムはf2のみ更新
を行うと思ってたからcomponentのはなしなんかしちゃったよ。
AとBで更新するカラムがかぶってるならテーブル1個で普通にバージョンによる
排他制御してくれ。理由は104が知っている。
0106デフォルトの名無しさん
2006/03/02(木) 11:07:43誤:テーブル1個
正:テーブル1個、クラスも1個
0107100
2006/03/02(木) 17:15:09× f1を更新した際は、システムA,B共にf3を更新します。
○ f1を更新した際は、システムA,B共にvを更新します。
同じカラムを更新する場合はバージョンを両システムとも上げます。
>>104
4) のところでupdate文にwhere v=1 が含まれると思いますので、
エラーにならないでしょうか?
>>105
両システムの更新するカラムがぶつかっている場合、ぶつかっている
箇所のみ排他処理をするのではまずいですか?
0108デフォルトの名無しさん
2006/03/03(金) 00:17:58dynamic-updateを使うってこと?
自分のとこでは使ってないから、dynamic-updateが確実なのかどうかよくわからないけど
その場合でも、Aシステム用のクラスにはVersionカラムを定義せず、
ナンバーアップも排他制御も全て手作りで書くのが無難だと思う
業務的に必要なら仕方ないけど
更新前に余計にSQL発行するわけでもないし
そこまでして排他制御を避ける理由がよくわからないな
0109108
2006/03/03(金) 00:19:54○ バージョニングを避ける理由
0110100
2006/03/03(金) 09:25:31バージョニングを避ける理由は、例として、
1) Bシステム : データー取得 (f1=a,f2=b,v=1)
2) Aシステム : データー取得 (f1=a,f2=b,v=1)
3) Bシステム : ユーザーがデーターの入力中
4) Aシステム : データー保存 (f1=a,f2=b→x,v=1→2)
5) Bシステム : 更新時エラー(バージョンが違うため)
3のデーター入力は入力項目が多いです。
4の更新内容は、Aシステムのみが使用するデーターカラム
の更新のみで、Bシステムの動作には影響しません。
ユーザーの作業効率を考えると、システムに影響がないの
であれば、5にてエラーとしない方がよいと考えました。
0111デフォルトの名無しさん
2006/03/03(金) 18:29:20チミのいってることはへんでないヵ?
(103)にて
>Aシステムは、f1,f2を更新する可能性があって、Bシステムは、f1のみ更新します。
(110にて)
> 3(=Bシステム)のデーター入力は入力項目が多いです。
ゆえにf1はたくさんの入力項目である。したがってAシステムも(人間が手で入力するのか自動で登録するのかは全く別として)
たくさんの項目を設定する。
だ か ら 、 たくさんの項目を設定したAシステムのf1が、ちまちま手入力したBシステムで入力したf1によってけされてしまうだろ?大問題ではないの?
それどころかAシステムでバージョンチェックしなかったらAシステムを同時に2人で使ったらデータが後勝ちしちゃうんだぞ。
そんなのDB使うときのポリシーとして許されるものじゃないんじゃない?
だめだ。どう考えてもバージョンチェックによる排他制御は必須としか思えない。
> >>104
> 4) のところでupdate文にwhere v=1 が含まれると思いますので、
> エラーにならないでしょうか?
ヴァージョンチェックを有効にしたらそりゃエラーになるよね。ただ、Aシステムはバージョンチェックをしたくないんでしょ?
だからエラーチェックをしない前提だからべつにどうでもいいんじゃない?どうでもいいから単純にバージョンあげわすれただけ。
ちゃんとバージョンは4)のところで1→2にあげましょう。
0112100
2006/03/03(金) 18:46:20> だめだ。どう考えてもバージョンチェックによる排他制御は必須としか思えない。
両システムが更新するカラム(f2)のみ排他制御を入れるのではまずいでしょうか?
> Aシステムはバージョンチェックをしたくないんでしょ?
Bシステムのみ使用するカラムはバージョンチェックをしないという方針です。
他の箇所はバージョンチェックします。
0113デフォルトの名無しさん
2006/03/03(金) 21:38:04おい!、103の書き込みをちゃんと見ろ!
両方更新するカラムはf1だろ!
Bシステムのみ使用するカラムなんてないだろ!
前提条件をころころかえるんじゃないよ。
わけがわからなくなるだろ!
0114デフォルトの名無しさん
2006/03/05(日) 11:43:390115デフォルトの名無しさん
2006/03/05(日) 12:05:08DBごとの駄目文字を上手いこと自動変換してくれるか、ってこと??
0116デフォルトの名無しさん
2006/03/05(日) 12:14:13狭い意味だと文字列末尾の'\0'を取り去ることだけになっちゃうね。
広い意味だといくらでもひろがっちゃうし。
>>114
というわけで、どこまで考えてるのかを、お願い。
0117デフォルトの名無しさん
2006/03/05(日) 12:32:400118デフォルトの名無しさん
2006/03/06(月) 18:53:18criteriaはそんなこともできんのですか?
0119デフォルトの名無しさん
2006/03/06(月) 19:06:13掲示板に書き込みしたのをパスワード入力して
消したら完全に消えるんですか???IDとか
0120デフォルトの名無しさん
2006/03/06(月) 20:01:57スレタイ読んで出直してくださいね。どこでも質問すればいいってもんじゃないです。
0121デフォルトの名無しさん
2006/03/07(火) 01:17:02HQLなら普通にgroup by書けばいい
Criteriaは使ってないからよくわからんが↓あたりじゃない?
ttp://www.hibernate.org/hib_docs/v3/reference/en/html/querycriteria.html#querycriteria-projection
0122デフォルトの名無しさん
2006/03/07(火) 10:25:40Hibernateのサイト見てやったらObjectの配列のListを返すとかいう美しくない結果にたどり着きましたが、それをとっかかりに以下の答えにたどり着きました。
これでClassA型で値が返ってきました。
//テーブルA(マスタ。ClassA)のうち、テーブルB(トランザクション。ClassB)にひとつ以上参照している行が存在するものを取得。返り値はClassA型のList
Criteria crit = getSession().createCriteria(ClassA.class);
crit.createCriteria("classB");
crit.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
ありがとうございました。
0123デフォルトの名無しさん
2006/03/09(木) 09:57:530124http://www.vector.co.jp/soft/win95/util/se072729.html
2006/03/18(土) 22:04:51もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
そういや64bitにネイティブ対応している2chブラウザてありましたっけ?
0125デフォルトの名無しさん
2006/03/18(土) 22:41:29あちこちにマルチ乙
0126デフォルトの名無しさん
2006/03/19(日) 08:50:46既存のマスタが論理削除で管理されている場合、
論理削除チェックはどこでやるもんなんでしょう?
0127デフォルトの名無しさん
2006/03/23(木) 23:23:50Hibernate3を使い始めたんですが、hbmを作るのが面倒です(PostgreSQLでテーブル100個ぐらいある)。
eclipseにプラグインを入れてもエラーで墜ちまくるので実用的じゃなさそうです。
eclipse以外に、PureJavaでつくられたツールとかでテーブルを観て自動的にHibernate3用のhbmをつくってくれるものありませんか。
0128デフォルトの名無しさん
2006/03/24(金) 11:12:39http://www.hibernate.org/hib_docs/tools/reference/en/html_single/#ant
これはどうですか
0129デフォルトの名無しさん
2006/03/24(金) 15:24:35ttp://www.associe-net.co.jp/maca/
0130デフォルトの名無しさん
2006/03/27(月) 18:58:40DB:Oracle XE
O/R-Mapping Framework:iBATIS2.1.7
環境は上記の通りなんですが、
ttp://opensource.atlassian.com/confluence/oss/display/IBATIS/Oracle+REF+CURSOR+Solutions
にあるような感じで、Procedureからの戻り値(OUTパラメータ)をBeanにマッピングするっていうようなことは出来るんですかね?
試してみたのですが、ResultSetが戻り値で返ってきちゃうんですよ。
ProcedureでのBeanとのマッピングってムリ?
0131デフォルトの名無しさん
2006/04/07(金) 00:34:01バージョンカラムを含めた形でDTOに値をコピーし、
更新時に再びDTOから永続化クラスに詰め直してupdateする・・・という手順でいいの?
遅延ロードを設定していて、値を取得していない関連オブジェクトがフィールドにある場合、どう扱ったらいいのだろうか?
0132デフォルトの名無しさん
2006/04/09(日) 12:42:56個人的にはDAOから取り出したオブジェクトはDBから縁が切れていてほしい
んだよね。なんかJSPで画面出してるときに、ここでDBになんかあったらど
うしようとか考えるのが気持ち悪いというか。
とはいえDAOで似たような中身のオブジェクトに詰め直すというのも冗長だし。
みんなどうしてるの?
0133デフォルトの名無しさん
2006/04/09(日) 13:16:57そのあとSessionをすぐにクローズしてる。Sessionはなるべく短く、短く。
0134デフォルトの名無しさん
2006/04/09(日) 13:18:020135デフォルトの名無しさん
2006/04/09(日) 14:10:17( ゚д゚)
_(__つ/ ̄ ̄ ̄/_
\/ /
 ̄ ̄ ̄
( ゚д゚ )
_(__つ/ ̄ ̄ ̄/_
\/ /
 ̄ ̄ ̄
( ゚∀゚ )アーッヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャ
_(__つ/ ̄ ̄ ̄/_
\/ /
 ̄ ̄ ̄
0136デフォルトの名無しさん
2006/04/09(日) 17:30:03お茶噴いた
0137デフォルトの名無しさん
2006/04/09(日) 19:08:210138133
2006/04/09(日) 21:22:50フェまで入力してATOKだとtabで自動変換するからそのままreturnおしたのさorz
普段どういう文章打っているかがバレバレだぜ〜
0139デフォルトの名無しさん
2006/04/09(日) 22:29:350140デフォルトの名無しさん
2006/04/09(日) 23:29:170141デフォルトの名無しさん
2006/04/10(月) 00:03:50日本人としてはちょっと長めらしい・・・。
なんて話はさておき、
Hibernateでは主キーがないテーブルのマッピングはできないんだな。
まあ当然なんだろうけど・・・。
0142デフォルトの名無しさん
2006/04/10(月) 06:58:110143デフォルトの名無しさん
2006/04/10(月) 11:21:34うちのダンナよりは長いよ
0144デフォルトの名無しさん
2006/04/10(月) 13:38:04てめえ人様の腹を捩らすとは何事だゴルァ
0145デフォルトの名無しさん
2006/04/10(月) 13:39:15お前金持ちだろ。
ピーナッツ食いまくって水ばっか飲んでるだろ。
それにオナニー回数も少なめだな?
チンポの長さと将来成功することと何か関係があるらしいぞw
0146デフォルトの名無しさん
2006/04/10(月) 14:04:55アンドロペニス 男性器増大医療器具 送料無料
http://www.liquidsky.co.jp/
0147132
2006/04/10(月) 18:02:27133のバカチンコのおかげで……orz
0148デフォルトの名無しさん
2006/04/13(木) 01:58:13HibernateもJBOSSの支援を受ける中、ObjectStyleだけで支えるのは大変だと
いうことかな。
おれはこのORマッパー、結構好きなんで、Apache加入後のiBatisのように、
着実に進歩していって欲しい。
とりあえず1.2は結構いい。
0149デフォルトの名無しさん
2006/04/13(木) 18:22:12>133
OpenSessionInViewでもリクエストのたびにSessionはクローズしているとおもうが。
ただモデル(もしくはコントローラ)でクローズするか、View層でクローズするかの違い。
だからどっちでおこなってもSessionは短い、短い。
こんな事象のときにOpenSessionInViewは効果を発揮する。
【前提】
A-B-Cと各々1:n関連したテーブルがあり、画面ではその全てを表示する。
【OpenSessionInViewを使用したら】
HQLは「from A」でOK。あとはView層でかってに遅延ロードによってBとCはロードされる。
【普通にやる場合】
HQLは AとBとCをJoinしなければならない。
または、「From A」として取得した結果をループでまわして遅延ロードを発生させなければならない。
まあ、こんな場合はOpenSessionInViewをつかったら楽々ですよ。
DAOから取得したA EntityクラスをFormにつっこんだら終わりだもんね。
0150149
2006/04/13(木) 18:40:57でも問題はあるのだよ。
【問題1】
遅延ロードは沢山のSQLを出力するから嫌いだ。
じつは、ふつうに遅延ロードをやると確かに遅延しない場合に比べて遅ーいばあいがあるね。
でも、以下のありがちな前提条件と、mappingの設定方法が合わさると、はやいのだ。
【前提条件】
1.次の10件みたいなページング機能が要求されている。
そしてその実装はHQLではなく、汎用的にView層で行っている。
2.HQLまたはSQLでJoinするとえらく複雑でOracleのほうでコストがすごい。
【対処】
前提1の対処
ページングがあるってことは、遅延ロードは10件分しかしなくていいよね。
でも遅延しなけりゃデータ数分Javaのメモリまでは展開されるんだからデータ件数によって
は遅延のほうがはやくなる。
それでも1件1件SQLが発生するのに抵抗がある人は、Hibernate-mappingの<Set>タグの
Attributeで「batch-size」ってのがあるんで、ここを20とかにすれば20行一挙に取得するSQLが
発行される。これは便利。
前提2の対処
遅延なしでOracleのコストがかかっている場合は、SQLを単純になるように分割したら
分割したほうが速くなる
ほら、共有プールのサイズとかあんまとれなくて、SQLであるコスト超えたら突然すごく
遅くなる場合あるじゃん。そんなときはjoinはずすとコストが下がるからサクサクと結果が
かえるようになる(こともあるよね)
0151149
2006/04/13(木) 19:13:51【問題2】
一覧表示系は問題ないが、一覧入力系で、かつカンマ区切りの数値や日付の入力がある。
【前提】
OpenSessionが機能してうれしいのは唯一View層での遅延ロードなのだから、そういう前提にする。
A-Bという1:nの関連があり、画面はAとBを同時に入力、Bのほうに数値と日付の入力がある。
JSFを使うとコンバータの機能があるから、多分簡単に解決する。だから前提はStrutsとする。
【対処】
Strutsで実装すると、カンマ区切りの金額、日付に対応するFormのAtributeはStringになると
思いますが、Bは遅延ロードの前提で、かつDBではNumber型やDate型なのでJavaの型は
BigDecimalとDate型とかにならざるをえません。
でもValidateのためにStringは別途必要です。
HibernateではCustom型を定義できるので、BigDecimalとDateの型のカスタム型を作成して、
カスタム型はBidDecimalとString型を内部では同時にもつように定義しておけば、
・ValidateはStringのほうで行い
・うまくBigDecimalに変換できるのであれば内部のBigDecimalのほうに値を移行
・あとはForm内のEntityをSaveすれば、DBに保存するようにUserTypeのコーディングを行う。
こんなことをやれば、コーディングレス(FormのStringからEntityへデータを移送するコードを
数値・日付のプロパティ分似たようなロジックを作ることがなくなる)で一覧入力系の
実装が可能。
まあ逆にそこまでしないと一覧入力系で遅延ロードの恩恵が得られないので、一覧入力系は
遅延ロードに頼らないというのも1つの手かもね。
0152130
2006/04/14(金) 21:56:30そこまで実行速度的に変わらんので、SQL直書きでもいいかな、と。
いちお、SSQLLibってのがあるらしい。
結局(PL/SQLだと)自分でResultSetをBeanにマッピングしないとダメか・・・。
StoredProcedureとBeanのマッピングってHibernateでもムリなん?
Hibernate使ったこと無いので。
>>133
(*^ー゚)b グッジョブ!!
0153デフォルトの名無しさん
2006/04/14(金) 23:29:580154デフォルトの名無しさん
2006/04/19(水) 17:15:25sqlmapconfig.xmlには、こんな風に書かれていました
<transactionManager type="JDBC">
<dataSource type="JNDI">
<property name="DBJndiContext" value="java:comp/env/jdbc/test"/>
</dataSource>
</transactionManager>
<sqlMap resource="sqlMap/test.xml"/>
これで1データソースに対してクエリを発行していると思うのですが、
これを2種のデータソースを使い分けるように変たいと思っています。
そもそもデータソース2種を使い分けることが可能なのでしょうか?
0155デフォルトの名無しさん
2006/04/20(木) 00:46:37TomcatなどのServlet Container レベルで考えると、JNDI経由で複数のDataSourceを取ることはできる。
> <dataSource type="JNDI">
> <property name="DBJndiContext" value="java:comp/env/jdbc/test"/>
> </dataSource>
この辺の記述はまさにServlet Containerの設定をそのまま持ってきてるようにも見えるので
(「java:comp/env/jdbc/test」というあたり)、iBatisでも出来るんだろうと思う。
でもiBatis使ってないのでその先は分からない。
0156デフォルトの名無しさん
2006/04/24(月) 00:53:53Setとかの代わりの定番ってある?
0157デフォルトの名無しさん
2006/04/24(月) 01:50:24String resource1 = "resources/sqlmapconfig1.xml";
Reader reader1 = Resources.getResourceAsReader (resource);
SqlMapClient sqlMap1 = SqlMapClientBuilder.buildSqlMap(reader1);
String resource2 = "resources/sqlmapconfig2.xml";
Reader reader2 = Resources.getResourceAsReader (resource);
SqlMapClient sqlMap2 = SqlMapClientBuilder.buildSqlMap(reader2);
try{
sqlMap1.startTransaction();
sqlMap2.startTransaction();
・・・
sqlMap1.commitTransaction();
sqlMap2.commitTransaction(); (*)
}catch(Exception ex){
sqlMap1.rollbackTransaction();
sqlMap2.rollbackTransaction();
}finally{
sqlMap1.endTransaction();
sqlMap2.endTransaction();
}
とかは駄目? (*)のところで異常が起きると変な事が起きそうだけど
ミッションクリティカルなシステムぢゃなきゃだいじょうぶでしょう・・・
0158デフォルトの名無しさん
2006/04/25(火) 23:26:420159デフォルトの名無しさん
2006/04/25(火) 23:38:41ひべるなーて
0160デフォルトの名無しさん
2006/04/25(火) 23:50:59はいばーねいと、でいいんじゃないの?
0161デフォルトの名無しさん
2006/04/26(水) 00:59:500162デフォルトの名無しさん
2006/04/26(水) 14:39:18はぁい、ばーねいと! (やあ、ばーねいと)
あい、ばーてぃす!(いいえ、わたしはばーてぃすです。)
0163デフォルトの名無しさん
2006/04/26(水) 14:48:170164デフォルトの名無しさん
2006/04/26(水) 14:52:210165デフォルトの名無しさん
2006/04/26(水) 19:14:12ibatisではHashMapが使用できて、key=カラム名、value=値 で取得可能なのですが。
0166デフォルトの名無しさん
2006/04/26(水) 22:16:200167デフォルトの名無しさん
2006/04/26(水) 23:13:32サービス、ドメイン、DTO、エンティティなど単語はよく聞きますがUML
図ばっかりの本がおおくて実際のソースコードで実感できるものを見たことが
無いので。。。
0168デフォルトの名無しさん
2006/04/26(水) 23:47:32Mapでも取得可能。DOMのElementに値を詰めて返すことも出来る
0169デフォルトの名無しさん
2006/04/27(木) 00:02:01要するにあれって「ただのまっとうなオブジェクト」ってことなんじゃないの?
「USERテーブルの行をロードしたデータ」じゃなくて、「ユーザー」という
「もの」を表したオブジェクトって考えようよ、というのがドメインモデルの
ベースにあるところじゃないかと。
オブジェクトだと考えたら、「ユーザーの登録を抹消する」なら「じゃあ
unregisterメソッドを読んだら抹消するってことで」と自然に思うじゃん。
裏でどんなSQL投げようが、ファイル読もうがセッションをごにょごにょ
しようが、抹消してくれればしったこっちゃないでしょう。それがオブジェ
クト指向ってもんだ。
DBを前提に考えちゃうと「ユーザを抹消するってことは、まず関連付けられた
契約レコードをすべて抹消したあと、ステータスをごにょごぎょして、
ユーザーのレコードの削除フラグをオン。それを効率良くするには、関連
レコードをジョインして....」とか考えてしまって、それをそのままべたっと
コードに書いてしまいがち。
オブジェクト指向的には、ユーザーというオブジェクトの「抹消」という
命令を呼び出したら勝手にごにょごにょして抹消してくれりゃいいわけ
で、その抹消メソッドが裏で勝手に契約レコードを抹消してステータス
変更してくれりゃいいじゃん、それがオブジェクトってもんだろ?
契約だってオブジェクトなんだから、ユーザーオブジェクトの抹消メソッド
のなかで、契約オブジェクトの契約解除メソッドよべばいいじゃん。
ってのがドメインモデルじゃないかな。
↓さあ景気良くいこう
0170デフォルトの名無しさん
2006/04/27(木) 00:16:08> 要するにあれって「ただのまっとうなオブジェクト」ってことなんじゃないの?
おそらくそういうことなんだろうな〜とは思ってるんですが、「サービス」とか
いうやつの位置付けがようわからんです。なんでも人によると「薄いのが良い」
とかいう意見を見受けますが”じゃなんなんだい!”みたいな
0171デフォルトの名無しさん
2006/04/27(木) 00:44:03・業務的には複数のモデルにまたがった業務処理を一括して行うためにある。
例:発送処理 おそらく「商品」と「発送業者」と「在庫」くらいの複数のモデルが
関わる予感がする。
・プログラム的視点では、トランザクション境界を定めるためにある。
サービス層の一つのメソッド呼び出しが1トランザクションになるようにする、
という感じで。いろんなモデルをごにょごにょした結果、裏でいろんなSQLが
走るわけだけど、それを一つのトランザクションにまとめる、という感じだろうか。
0172デフォルトの名無しさん
2006/04/27(木) 00:58:31> 例:発送処理 おそらく「商品」と「発送業者」と「在庫」くらいの複数のモデルが
> 関わる予感がする。
EntityやDAOの呼び出しロジックをサービスにまとめるってことで総括して良いん
でしょうか。もっとシンプルに言うなら、ビジネスロジックの担当がサービスなん
だっていうことなんでしょうか。
0173デフォルトの名無しさん
2006/04/27(木) 01:12:010174デフォルトの名無しさん
2006/04/27(木) 03:01:05データベースを使ったアプリという意味なら、データベースを使ったアプリで
ドメインモデルを使わなけりゃいつ使うのかと。
0175デフォルトの名無しさん
2006/04/27(木) 03:23:221行目はそうだと思う。
2行目は微妙。たとえば売り上げオブジェクトの「未回収」メソッドを呼んだら
赤伝オブジェクトが生成されて、台帳オブジェクトに追加されるとしたら、
これは立派なビジネスロジックなわけだが、この処理を書くところはあくまで
「売上」オブジェクトであるべきだよな。
だって「未回収」メソッド呼んだら裏でごにょごにょやる内容が赤伝生成だったり
台帳更新だったりするわけで。
仮に台帳更新をしたらどっかの担当者にメールを送らないといけないとしても、
台帳の更新メソッドが呼ばれたら、メーラーオブジェクトの送信メソッド呼ぶように
してりゃいいわけで、結局外からみれば、売上の「未回収」を呼ぶだけで台帳に
赤伝が入って担当者にメールが飛ぶ、というビジネスロジックが実行される。
だったらロジック実行には売上オブジェクトだけあればOKだよな?
こんな感じで結構な数のビジネスロックはドメインモデル内で実行可能だと思う。
でも処理実行後に、たとえば現在の赤伝数とか、赤伝発行後の売上高だとか
を取得して画面に返さないといけないとしたら、これはあくまでウェブアプリ
ケーションの都合で実行するんであって、ビジネスロジックとは関係ない。
でも同じトランザクション内で赤伝数のカウントしたり、売上高計算したり
しないといけなかったりもする。
となると、サービスとして一つのトランザクション境界としてまとめるのが
一番やりやすいかなあ、と思うな。
まあでもぶっちゃけて言うと、Springとか使うとメソッド呼び出しと応答までを
トランザクション境界にする機能があって便利なんで、それを利用するためだ
けにサービス用意して、サービスを呼び出したら即モデルのメソッド一つ呼んで
終わり、なんてこともある。だってプログラム的にトランザクション制御する必要な
くて楽だからさあ。
0176デフォルトの名無しさん
2006/04/27(木) 06:41:15ドメインモデルとしてロジックを書きたくなるんだけど
現在のDIコンテナは、ステートレスなトランザクションスクリプトを扱う方が便利だから
そこにちょっとしたズレを感じたりしている
エンティティにストラテジーをDI出来たりするO/Rマッピングツールが出たら便利そうなんだが
0177デフォルトの名無しさん
2006/04/27(木) 09:26:32遅延ロードのときのSet型の中身を並べ替えすることは、mappingの定義(order-byアトリビュート)
でできるけど(実際、many側のデータを使った並べ替えはできた)、many側にひもづく別のクラスの
データを使って並べ替える事は可能?
A:B:C −> A:B=1:n B:C=n:1
Cの「並び順」フィールドの値でBを並べたい、みたいな感じ
0178デフォルトの名無しさん
2006/04/28(金) 14:22:22すんません。
参考サイトとか教えていただけないでしょうか?
0179デフォルトの名無しさん
2006/04/29(土) 06:17:05ttp://www.hibernate.org/hib_docs/v3/reference/en/html/persistent-classes.html#persistent-classes-dynamicmodels
そういや、リファレンスの日本語版はいつまで経っても2.1.6のままだな
0180デフォルトの名無しさん
2006/04/29(土) 10:31:44つ「言いだしっぺ必敗の法則」
ということで翻訳よろしくww
0181デフォルトの名無しさん
2006/04/30(日) 03:38:19つ「言いだしっぺ必敗の法則」
それやると誰も何も言いださんくなるよ。
おれの前の会社がそーだったよ。
0182デフォルトの名無しさん
2006/04/30(日) 06:43:25ものだからな>言いだしっぺ
あれはある意味2chの対極にある世界だった。
0183デフォルトの名無しさん
2006/05/01(月) 00:51:28つか、冗談だからw ちゃんと"ww"つけてるじゃん。
というか、前の翻訳は誰がやったんだ?
0184デフォルトの名無しさん
2006/05/01(月) 01:12:56笑えてくる。
0185デフォルトの名無しさん
2006/05/01(月) 15:15:45人生楽しそうですね。
0186デフォルトの名無しさん
2006/05/02(火) 19:19:08http://incubator.apache.org/projects/open-jpa.html
0187デフォルトの名無しさん
2006/05/02(火) 23:31:28.NETでORMに詳しい人が集まってそうなスレが見当たらなかったもので・・・。
NHibernate Best Practices with ASP.NET, Generics, and Unit Tests
http://www.codeproject.com/aspnet/NHibernateBestPractices.asp
上のサイトのサンプルに、NHibernateでのOpenSessionInViewパターンの実装例があるのですが、
リクエスト開始時にbeginTransaction、リクエスト終了時にcommitTransactionとsessionCloseを行っています。
この作りだと、もしリクエスト中に例外が発生した場合、Transactionはどうなるのでしょうか?
JavaのFilterと全く同じ仕組みが無いのでこうしてるのかとは思うのですが、これで問題が無いのかどうかがイマイチわかりません。
一応、Session管理クラスの中を見ると、commit時に例外キャッチしたらrollbackするようにはなっているんですが、
Transaction中に例外が起きた場合にcommitが成功してしまうケースってありえないんでしょうか?
それともTransaction中に例外が発生した場合には、必ずcommitで例外が送出される仕組みなんでしょうか?
0188デフォルトの名無しさん
2006/05/03(水) 23:31:55マッピングxmlやhibernate.cfg.xmlって普通どこに配置するのがメジャー?
0189デフォルトの名無しさん
2006/05/13(土) 10:40:380190デフォルトの名無しさん
2006/05/13(土) 12:20:530191JAVA初心者
2006/05/13(土) 23:44:13今日はTORQUEに関する質問です。
TORQUEについて、まだ使用経験がないのですが、今度使わなくてはいけなくなりました。。。。
でも、なにせ資料が少ないので。。。。
DBの中でプライマリーキー(ここではID)の一番大きい数をしるのは
そうやってやればいいでしょうか?
たとえば、IDが今は10番まで使われていたとして、その10番というのを
知る方法が知りたいのです。SQLだと、SELECT MAXみたいなので
GETできると思いますが。。。。。
よろしくお願いしますm__m
0192191
2006/05/13(土) 23:52:50ここから誘導されてきました。
【初心者】Java質問・相談スレッド85【大歓迎】
http://pc8.2ch.net/test/read.cgi/tech/1147315998/l50
0193デフォルトの名無しさん
2006/05/15(月) 17:44:33すいません。ちがいます。
sqlのxmlファイルに、ibatis用の拡張タグを使用できる仕組みになっているかを確認したかったです。
0194デフォルトの名無しさん
2006/05/16(火) 09:57:01<!DOCTYPE sqlMap
PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">
0195194
2006/05/16(火) 10:07:24SqlMapClientBuilder#buildSqlMapClientに
velocityを喰わせることは出来るかもね。
やったことないケド
0196デフォルトの名無しさん
2006/05/17(水) 00:40:11現在Javaで作成している基幹系アプリケーションで、ランタイム上で
テーブルの作成・修正・削除を行う必要があります。
この場合、O/R Mapping Frameworkは向かないでしょうか?
今のところ、JavassistなどでAnnotation付きのクラスファイルを生成して、
それをHibernateのConfigurationに動的に読み込ませれば良いのでは?
と考えていますが、まだ実現に至らずです。
どなたかノウハウをお持ちでしたら、ぜひ教えてくださいm(_ _)m
0197デフォルトの名無しさん
2006/05/17(水) 00:45:43http://www.fk.urban.ne.jp/home/kishida/kouza/hibonrails.html
0198デフォルトの名無しさん
2006/05/17(水) 09:45:07> ランタイム上でテーブルの作成・修正・削除
ていうか何そのキチガイ設計。
キチガイが作ったのを引き継がされたの?
0199196
2006/05/17(水) 22:48:44>>197さん
提示していただいたリンク先の方法を確認しました。
生成したクラスコードからテーブルを自動的に生成する
必要があります。
そのため、この方法は利用できないと判断しました。
>>198さん
キチガイですいません orz
まだまだ勉強が足りないと痛感してます。
0200196
2006/05/17(水) 22:49:27今回の案件では、ユーザが自由に編集できるクラスと
そのオブジェクトを永続化してRDBに登録するアプリケーションを
作成します。
クラス自体の生成、修正(継承先の変更等)、削除だけでなく、
クラスのフィールドの追加、修正、削除もサポートする必要が
あります。
クラスの編集によって、オブジェクトを格納するテーブルも
修正しなければいけないため、アプリケーション上で動的に
テーブルを操作する方法を質問しました。
できるだけO/Rマッピングツールを使うように言われていますが、
今回の目的だと、素直に動的にSQLを生成して操作した方が
良いような気がしており、エキスパートの方々のご意見を伺おうと
思いました。
個人的には、今回の案件だと、RDBMSの種類やバージョンに
よる方言を吸収して、コネクションプーリングなどを提供する
ツールなら何でもいいような気もしますが、中小の下請けなので
強く言い出せません orz
乱文長文失礼しました。
0201デフォルトの名無しさん
2006/05/17(水) 23:19:26バイトコード操作使いまくりか…
正直Javaでやるのが間違ってると思われ。いまからLispハッカー
探せ。奴らは毎日そういうことやってる。
0202デフォルトの名無しさん
2006/05/17(水) 23:20:310203デフォルトの名無しさん
2006/05/17(水) 23:29:43データベースさえcreate文で作ってしまえばいいんじゃねぇの?
そしたらあとはマッピングクラス生成してマッピングっていうのをやってくれて望みどおり
0204デフォルトの名無しさん
2006/05/17(水) 23:43:52くらいの列につっこむようにするとかは?
0205196
2006/05/18(木) 00:27:31>>201さん
すいません、>>200の説明で、大変な御幣がありました。
>今回の案件では、ユーザが自由に編集できるクラスと
>そのオブジェクトを永続化してRDBに登録するアプリケーションを
>作成します。
ここで言うクラスとオブジェクトはJavaのものではなく、OWLのものでした。
先方さんは、
OWLのクラス・インスタンス ⇔ Javaのクラス・インスタンス ⇔ DB
という処理を希望されています。
OWLだと、トリプルの構造をそのままテーブルに格納すれば良いと
思っていましたが、メインは検索処理でインスタンス数が多いそうで、
そのようなテーブルスキーマだと速度が出ないと判断しました。
0206196
2006/05/18(木) 00:37:18>>203さん
DDLだけConnectionを直接取得してSQLで行うことも検討しています。
このとき、対応するマッピングクラスをConfigurationに設定した場合、
既にbuildされたSessionFactoryに変更を反映する方法が分かりませんorz
独自にFactoryの実装を行えば動作しそうな気もしますが・・・
>>204さん
BLOBにシリアライズしたクラスコードとオブジェクトを挿入することも考えました。
この場合、index用のデータをテーブルの別のフィールドに格納しておけば
検索速度も上がるのかなと思いますが、保守やシステムのアップグレードが
大変そうで躊躇しています。
相変わらず長文ですいませんorz
最近謝ってばかりだ…
0207デフォルトの名無しさん
2006/05/18(木) 00:49:24漏れにはわからん世界だが、RDBMSの性能のことならわかる。
いまのPCの性能で、行数が多すぎて性能が出ないなんて
話は猛烈なレアケース。
いろいろごちゃごちゃ理由がつくんだろうが、RDBMSはごちゃごちゃ機能を
つけてて、必ず対策があるようにできてる。RDBMSのマニュアル調べてみろ。
0208196
2006/05/18(木) 01:15:01OWLのクラス階層の編集を可能とするため、上位クラスの変更を下位クラスにも
反映させる必要があります。
また、個々のクラスのインスタンス数は大したことはないですが、想定している
インスタンス数が全体で100万のオーダーであるため、それを一つのテーブルで
OWLのトリプル単位でばらして格納するよりは、クラス単位でテーブルを生成して
そこに持たせた方が良いのでは、と考えました。
(複雑なデータ型の問題ももちろんあります)
O/R Mapping Toolを使わずに、自前で作成した方が良いのかもしれません。
とりあえず、仕様を含めて、RDBMSをもう一度勉強しなおしてきます。
ご指摘ありがとうございました。
あぁ、今夜もクラス階層を構築している夢を見そう orz
0209デフォルトの名無しさん
2006/05/18(木) 01:21:21腹がよじれた失意体前屈?
0210デフォルトの名無しさん
2006/05/18(木) 01:56:020211デフォルトの名無しさん
2006/05/18(木) 10:39:25>OWLのものでした。
BC++のObjectWindows Libraryかと思った
0212デフォルトの名無しさん
2006/05/18(木) 13:05:54本当にすいません。
タグはタグでも、<select>内に書ける<equal>などのタグです。
0213デフォルトの名無しさん
2006/05/18(木) 13:21:17巨乳巨腹のorzです。
0214デフォルトの名無しさん
2006/05/18(木) 14:03:330215196
2006/05/18(木) 22:14:30OWLのクラスをJavaのクラスに、OWLのプロパティをJavaのクラスのフィールドに
見立てようと思っていました。
そうすると、OWLのインスタンスはJavaのフィールド値の集合で表せるかな、と。
>>211さん
OWLはWeb Ontology Languageの方です。
不注意で誤解を与えて申し訳ない。
>>214さん
今回は検索系がメインらしいので、XML-DBだと速度面が不安です。
先方さんの話をよく聞くと、各RDBMSのSQLの方言を吸収できて、かつノウハウが
多く得られるようなミドルウェアなら何でも良さそうです。
何かの記事で読んだC-JDBCとか気になりますが、スレ違いなのでやめておきます。
皆様、お付き合いいただきありがとうございました。
0216デフォルトの名無しさん
2006/05/18(木) 22:22:06OWLってのの具体的な事は全くわからんが、
最初の3行が間違ってる気がするな。
0217デフォルトの名無しさん
2006/05/18(木) 23:33:54キチガイの相手は大変だな。
おそらく全部ぐだぐだになって成果物ゼロで終わると思うが、
金はしっかり取れよ。
0218196
2006/05/19(金) 00:29:06>>216さん
OWLのクラスとプロパティのそれぞれに、独自のAnnotationをつける仕様なので、
(1)OWLのクラスのAnnotation用テーブル
(2)OWLのプロパティのAnnotation用テーブル
(3)OWLのクラスとOWLのプロパティの対応情報テーブル
(4)各クラスのインスタンス用テーブル(カラム名は各プロパティ名)
の4種類のテーブルを作成するように設計しました。
大学出立てで経験が浅いので、どの辺がマズいかはわかりませんorz
>>217さん
汎用性と性能は両立しないのは分かっていますので、そこそこのものを提供しようと
思っています。
情報収集の最中に発見したのですが、Seasarファウンデーション傘下のTuigwaaが
Hibernate使用&DDLサポートとなっていました。
ダイコン?とかよく分からないですが、参考になるかもしれないので今週末の休みに
ソースを読んでみようと思います。
0219デフォルトの名無しさん
2006/05/19(金) 00:36:42>OWLってのの具体的な事は全くわからんが
おまえ日本語読める?
0220デフォルトの名無しさん
2006/05/19(金) 00:53:12顧客がイカレてるせいで、こいつもおかしくなってるんだろう。
金だけはしっかり取れよ。
0221デフォルトの名無しさん
2006/05/19(金) 01:15:22ヒルベルト変換、ヒルベルト包絡線を思い出した
0222デフォルトの名無しさん
2006/05/19(金) 01:44:030223デフォルトの名無しさん
2006/05/19(金) 01:51:030224デフォルトの名無しさん
2006/05/19(金) 02:19:360225デフォルトの名無しさん
2006/05/19(金) 10:31:23世の中色んな案件あるんだね。
0226デフォルトの名無しさん
2006/05/19(金) 14:11:210227デフォルトの名無しさん
2006/05/19(金) 14:56:260228デフォルトの名無しさん
2006/05/19(金) 22:42:450229デフォルトの名無しさん
2006/05/19(金) 23:15:350230デフォルトの名無しさん
2006/05/19(金) 23:51:15⊂⌒( ・ω・) はいはいわろすわろす
`ヽ_っ⌒/⌒c
⌒ ⌒
0231デフォルトの名無しさん
2006/05/27(土) 13:38:21サンプルが落ちているところをご存知の方いませんか?
0232デフォルトの名無しさん
2006/05/27(土) 19:56:18SelectQueryのsetPageSize()じゃ用途に合わないのかな?
Cayenneのページにサンプルがあるよ。
ttp://www.objectstyle.org/cayenne/userguide/perform/paged-queries.html
0233231
2006/05/29(月) 11:43:03サンクス
見てみます。
0234デフォルトの名無しさん
2006/05/31(水) 14:58:57キャッシュの設定によってはHibernateのが早かったりする?
0235デフォルトの名無しさん
2006/05/31(水) 19:46:510236デフォルトの名無しさん
2006/05/31(水) 22:47:030237デフォルトの名無しさん
2006/06/01(木) 01:50:110238デフォルトの名無しさん
2006/06/01(木) 22:10:42lazyオフでキャッシュなしか?
0239デフォルトの名無しさん
2006/06/01(木) 22:27:56いくつかは考えられるだろ。
・最初の一回目の検索の場合(Hibernateが該当するオブジェクトをまだロードしていない状態)
・ストアドプロシージャを呼び出す場合(Javaアプリ側でなんとかするより、ストアド使った方が速い場合が多い)
0240234
2006/06/03(土) 00:48:56ちなみに、バッチ処理で1回のみですがテーブル全件舐めたりします。
1回きりの場合だとHibernate導入するメリット無さそうですね・・・(パフォーマンス面で)。
ストアドである程度書いてJDBCで呼ぶってのが理想的みたいですが、ストアドで作るとメンテできん!って怒られます。
バッチでストアド無しでパフォーマンス高くする手ってなんかないですかね〜・・・。
0241デフォルトの名無しさん
2006/06/03(土) 11:17:370242デフォルトの名無しさん
2006/06/03(土) 15:39:34・バックグラウンドでSQLを作って投げる
・返ってきたresultsetをbeanに自動的にマッピングしてcollectionに詰めて返す
が本質だよね?
そう考えると、DbUtilとかでも十分なのかな。。。
うちの会社、こういう新しい?技術とかの導入に消極的だし、
新しい知識を積極的に勉強しようっていう技術者も少ない。。。
個人的にはiBATISあたりがよさげなんですが、使ってる人いますか?
0243デフォルトの名無しさん
2006/06/03(土) 16:15:010244デフォルトの名無しさん
2006/06/03(土) 16:38:130245デフォルトの名無しさん
2006/06/03(土) 16:46:05いちいちXMLとかに定義しないと使えないわけ?
extends MySQLObjectとかしてささっとプロパティだけで完結して欲しい。
0246デフォルトの名無しさん
2006/06/03(土) 17:12:28関連テーブルを自動的に取ってきてくれるという重要な機能が
あるでしょ(これはDbUtilにはない)。
0247デフォルトの名無しさん
2006/06/03(土) 17:15:40つ 無定義Hibernate
ttp://www.fk.urban.ne.jp/home/kishida/kouza/hibonrails.html
俺の場合はCayenneを使ってDBのDDL作成とマッピング定義作成を
Cayenne Modelerで同時にやっちゃうので、ORマッパーを使ったからと
いってそんなに負荷は変わらない感じ。
0248デフォルトの名無しさん
2006/06/03(土) 17:25:55JPA使えばXMLファイルはもういらない
0249デフォルトの名無しさん
2006/06/03(土) 17:33:59ふーん。いいね、組み込みDBとかで気軽に永続化できるようになると
ゲームとかも作りやすくなっていいかなぁ
0250デフォルトの名無しさん
2006/06/03(土) 19:05:00MiddlegenでもXDocletでも、Hibernate Annotationでも、好きなの使え。
0251デフォルトの名無しさん
2006/06/08(木) 22:05:18みんなxmlでしこしこやってるの?
0252デフォルトの名無しさん
2006/06/08(木) 23:30:24いまPro EJB3を読んでるところだと思われ。
でもなんでそこでxmlが出てくるのかわからない。
0253デフォルトの名無しさん
2006/06/09(金) 10:14:29Java Persistence APIってなんなの?
0254デフォルトの名無しさん
2006/06/09(金) 10:26:060255デフォルトの名無しさん
2006/06/09(金) 11:20:29jspタグライブラリでも使用できるらしいけど。
ってことは、jspでDBアクセス用ってことか・・・。不要じゃん
0256デフォルトの名無しさん
2006/06/09(金) 16:54:17JPAの仕様とは関係ない
JPAは、HibernateやTopLinkを元にしたO/Rマッピングの標準仕様のこと
0257デフォルトの名無しさん
2006/06/10(土) 18:42:38JSPタグライブラリにJDBCタグライブラリがあるが、JDBCはJSPでDBアクセス用か?
0258デフォルトの名無しさん
2006/06/10(土) 20:18:240259デフォルトの名無しさん
2006/06/11(日) 13:51:28子供か!!
0260デフォルトの名無しさん
2006/06/11(日) 16:52:360261デフォルトの名無しさん
2006/06/13(火) 22:09:47普通にカラム名と条件書くと関連テーブルにそんなカラムねーよ!!って怒られちゃうんですが・・・。
0262デフォルトの名無しさん
2006/06/14(水) 07:18:090263デフォルトの名無しさん
2006/06/14(水) 09:18:08使えないなあというか使うの怖いなあ。
まあそのときだけJDBC使えって話はあるけど。
0264デフォルトの名無しさん
2006/06/14(水) 10:19:430265デフォルトの名無しさん
2006/06/14(水) 10:26:34ibatis
0266デフォルトの名無しさん
2006/06/14(水) 11:37:060267デフォルトの名無しさん
2006/06/14(水) 17:14:33そういう開発者、いそうだね。特に新規に導入するとき、わからない→直書きってされそう
0268デフォルトの名無しさん
2006/06/14(水) 23:34:39プログラマとしては逃げたくなくても、サラリーマンとしてそういう手段に逃げちゃう時が多々あるんで・・・・・・。
0269デフォルトの名無しさん
2006/06/17(土) 11:50:260270デフォルトの名無しさん
2006/06/17(土) 11:51:430271デフォルトの名無しさん
2006/06/17(土) 11:57:000272デフォルトの名無しさん
2006/06/17(土) 14:51:30EJB3を使ってJPAの実装としてHibernateを利用
0273デフォルトの名無しさん
2006/06/17(土) 14:52:33つうか、これからはJPAという標準になるんだから、ゲームで使うくらいならTopLinkもHibernateも大差なかろう。
0274269
2006/06/18(日) 01:32:50今までEJBって使った事ないんですが、使い分けってどんな基準ですか?
>>272
なるほどー。
使い分けってよりJPAの実装としてHibernateを選択って感じなんですね。
0275デフォルトの名無しさん
2006/06/18(日) 02:45:06いままで使ってなかったのはEJB2
EJB3とは別物。
ORマッピング使うなら、EJB3で十分。
実質的にはHibernateの仕様がEJB3になったわけだから、EJB3とHibernateをどう使い分けるかということが、そもそもナンセンスということになる。
0276デフォルトの名無しさん
2006/06/18(日) 02:57:00リモートで呼び出せるかどうかのみ違う。
使い分けはそこだけかな。
0277デフォルトの名無しさん
2006/06/18(日) 03:02:14たとえばCayenneもJPAをサポートするといって準備しているけど、Cayenneの
発想とJPA(Hibernate)のやり方(というか考え方)って結構違うように思う。特に
トランザクションを意識させない設計とか、どうすんだろ、と思う。
TopLink(Grassfishに組み込みのやつ)とかはどうなんだろうか。
0278275
2006/06/18(日) 03:47:22HibernateもCriteriaとかProjectionとかがEJB3に取り入れられてなくて残念なんだけど、ORマッピングのプログラムインタフェースの部分だけを見ればJPA準拠ならHibernate互換ということになるんじゃないかな、と思ってます。
0279275
2006/06/18(日) 03:53:08重箱の隅だけど、GlassFishね。草みたいな魚じゃなくて、ガラスみたいな魚。
TopLinkは、JPAの実装として使う限りでは、個性を感じない。
もちろん、どのJPA実装も、JPAの実装として使う限りでは個性を感じないというのは当たり前の話ではあるんだけど。
0280デフォルトの名無しさん
2006/06/18(日) 05:50:230281275
2006/06/18(日) 08:08:21でも実測値がほしかったら、実サーバーで確認するのんが確実
0282デフォルトの名無しさん
2006/07/03(月) 23:13:24ttp://japan.cnet.com/news/ent/story/0,2000056022,20157827,00.htm
>テキサス州の連邦地方裁判所に今週提出された訴状によると、
>原告のFireStar Softwareは、JBossのHibernate 3.0が同社の
>「オブジェクト指向ソフトウェアを用いた、リレーショナルデータベースの
>リンクに関する特許」を侵害していると主張しているという。
0283デフォルトの名無しさん
2006/07/04(火) 01:49:42特許侵害しているとして訴えられただけだろう。
まだまだ一方的な主張の段階。
「特許侵害だとよ。」は風説の流布に当たるおそれがあるから注意。
断定は判決が出てからに汁。
よくあるアメリカ流のふっかけ・ゆすりと推測してみる。
うまく行けば和解金ふんだくれるもんな。
0284デフォルトの名無しさん
2006/07/04(火) 21:10:50場所 所沢(池袋・高田馬場から直通)
i−want−to−study−java@hotmail.co.jp
(アドレスは全角で書いてあるので半角に直してください)
よろしくおねがいします
0285デフォルトの名無しさん
2006/07/04(火) 23:56:57すでに「おい、そのころには既にEOFがあったわけだが。
そのEOFにすら先行技術があるんだが?」と冷静なツッコミが
入っとるよ。
0286デフォルトの名無しさん
2006/07/05(水) 05:13:300288デフォルトの名無しさん
2006/07/10(月) 22:01:42http://www.simpleorm.org/whitepaper.html
whitepaperを眺めてみたらいい感じ。
クラスに定義したメタデータからテーブルを作ったりできるらしい。
新規開発にしか向かないかな?
0289デフォルトの名無しさん
2006/07/17(月) 21:22:59専門学校などでJavaを勉強されていて夏休みだけ教えたいという方も歓迎です
0290284
2006/07/17(月) 21:28:22専門学校などでJavaを勉強されていて夏休みだけ教えたいという方も歓迎です
0291284
2006/07/17(月) 21:46:200292デフォルトの名無しさん
2006/07/18(火) 01:36:110294デフォルトの名無しさん
2006/07/18(火) 18:28:56IntegerじゃなくてLongで取得したいのですが、いったいどうすれば…
0295デフォルトの名無しさん
2006/07/18(火) 20:19:24IDも出ない板でよく言うよ
0296デフォルトの名無しさん
2006/07/19(水) 01:07:07ttp://opensource.atlassian.com/projects/hibernate/browse/HHH-1538
3.2での対応になる
0297デフォルトの名無しさん
2006/07/19(水) 02:32:50ありがとうございます
丸一日、試行錯誤してしまいましたが
3.2.CR2入れることにします…
0298デフォルトの名無しさん
2006/07/22(土) 09:36:29アノテーションにSQLを書くみたいだが。
ttp://download.java.net/jdk6/docs/api/java/sql/DataSet.html
0299デフォルトの名無しさん
2006/07/22(土) 11:01:440300デフォルトの名無しさん
2006/07/23(日) 02:09:26こういうのなんだけどさ。
@SQL(value = "SELECT * FROM dept", bean = Dept.class)
public abstract List<Dept> readAll();
@SQL(value = {
"UPDATE emp SET salary = salary - {#arg[2]} WHERE id = {#arg[0].id}",
"UPDATE emp SET salary = salary + {#arg[2]} WHERE id = {#arg[1].id}",
}, type = TYPE.UPDATE
)
public abstract void moveSalary(Emp from, Emp to, int price);
完成したら公開しようと思っていたのだけれど、微調整したら公開しちゃおう。エヘヘ
0301デフォルトの名無しさん
2006/07/23(日) 09:05:28標準のは、CachedRowSetを使っていて、CachedRowSetはJDBCドライバの対応が
必要だから、存在価値としてないわけじゃないと思うけどね。
しかし、どうせなら誰か.NETのDataSetをそのまま実装して欲しいな。
NinjaVAが実装しているけど、DataSetのソースが5000ステップくらいあるのと
微妙に違うので、いまいち使いづらい。
0302デフォルトの名無しさん
2006/07/26(水) 23:40:17公開期待してます。
0303デフォルトの名無しさん
2006/07/28(金) 00:40:27簡単なサンプルを作成して実行してみたところ以下のようなエラーが出ました。
Exception in thread "main" org.hibernate.MappingException: Unknown entity: sample.Employee
そこでhibernate.cfg.xmlから<mapping package="sample"/>と<mapping class="sample.Employee"/>
のタグを削除してnew AnnotationConfiguration().configure().addClass(Employee.class)と
したところ問題なく実行できました。
この場合どこが悪くて最初の方法で実行できなかったのでしょうか
使用したライブラリのバージョンは下のやつです。
hibernate-3.2
hibernate-annotations-3.2.0.CR1
0304300
2006/07/28(金) 01:33:19BSD License です。
http://sourceforge.jp/projects/crudfactory/
すいません、ドキュメントが一切ないです。サンプルのソースを見て下さい。
ognlとcglibが必要です。
こちらでは以下のバージョンで動かしています。他で動くかはわからないです。
サンプルを動かすには hsqldb が必要です。1.8.0 を使っています。
cglib-nodep-2.1_3.jar
ognl-2.6.7.jar
まだ無い機能、やってないこと
ログを取る機能
しっかりしたエラー処理
HSQLDB以外での動作確認
ドキュメントを書く
もっとしっかりしたサンプルを書く
ソース内のコメント
SQLの中の {#arg[0]} の部分。ここの {} の中に ognl が記述できます。methodの引数が arg という配列に入ってます。
0305300
2006/07/28(金) 01:43:02hsqldbで
CREATE TABLE dept (
id INTEGER NOT NULL IDENTITY,
name VARCHAR NOT NULL,
PRIMARY KEY(id)
);
としていて、
INSERT INTO dept (name) VALUES ('name');
としたら、id列に値が自動で入ります。
この時id列に入った値を、取り出してbeanにセットしようとしています。
id列に入った値を取り出す方法が、RDBMSによってマチマチ?なようです。
で、とりあえず、SQLアノテーションのtypeというパラメータで使い分けるようにして、
INSERTした直後にCALL IDENTITY()とやって、その値をセットする方法を、CREATE_IDENTITY
PreparedStatementでINSERTしたあと、PreparedStatement#getGeneratedKeysする方法を、CREATE_GENERATE
INSERTしっぱなしでbeanに値を入れるのを放棄する方法を、CREATE
としてますので、使う人は使いわけて下さい。
IDENTITYを設定した列が2コあったらどうなるんだ?とか、まとまり切っていませんので。
0306300
2006/07/28(金) 01:44:30ドキドキしています。
0307デフォルトの名無しさん
2006/07/28(金) 01:54:410308デフォルトの名無しさん
2006/07/28(金) 08:15:21乙!
と思って、早速いろんなDBで動作確認…と思ったら、
リリース物件もソースコードリポジトリも空っぽですよ?
0309300
2006/07/28(金) 08:23:51俺sf.jpの使い方わかってないぽいので、しばしお待ちを……
スレ汚してすいません。
0310デフォルトの名無しさん
2006/07/28(金) 09:41:06頑張れ。君に期待している。
0311デフォルトの名無しさん
2006/07/29(土) 00:47:50私も期待しています。
頑張ってください。
0312デフォルトの名無しさん
2006/07/29(土) 01:58:50DL出来るようになってるみたいだね
0313デフォルトの名無しさん
2006/07/30(日) 04:53:440314ストーカー
2006/08/03(木) 01:49:49こんなんできてるYO!
0315デフォルトの名無しさん
2006/08/03(木) 11:29:37Hibernateを使おうかと考えていますが、ネットの入門を見ている限りSELECTした結果を一気に取得しているようです。
全件一気にオブジェクト化するとメモリが足りなさそうなのですが、こういう用途はJDBC使って1件ずつ取り出した方が良いんでしょうか?
0316デフォルトの名無しさん
2006/08/03(木) 11:56:03何十件かまとめてSELECTするよろし。
それにそもそも、巨大なテーブルを全部変更するなら
ストアドプロシージャのほうが圧倒的に効率がいい。
0317315
2006/08/03(木) 12:48:31SELECT * FROM TABLEして全件取得して、ResultSet.next()で1件ずつ処理したいって事なんです。
Hibernateの入門ページ見てると、検索結果がListで一気に戻ってきているようだったので。
つまり聞きたいのは、検索結果全件を一気にオブジェクト化するとメモリが足りないので、
検索結果全件の中から1件ずつオブジェクト化して処理できないかな?って事です。
ListのgetやIteratorのnext時にオブジェクト化されていたら問題なさそうなんですか。
って書いてたら聞くより本なり読んでちゃんと理解してから判断した方がいい気がしてきた・・・。
0318デフォルトの名無しさん
2006/08/03(木) 13:24:03素のJDBCだと 一方向に読み込み専用 で取得すると
一気には取ってこないみたいだね
0319315
2006/08/03(木) 16:36:42それをO/RマッピングでやってみたいんですがやっぱJDBC使わないとダメなんでしょうかね。
ふむむ、できないとしたら分割してSELECTするなり工夫が必要かぁ・・・。
0320デフォルトの名無しさん
2006/08/03(木) 16:52:08Hibernate使ったこと無いけど、lazy initializationを有効にすると
取得したコレクションからオブジェクトを取得するときまで
インスタンス化を遅らせることができるそうだ。
ttp://www.hibernate.org/hib_docs/reference/ja/html/collections.html#collections-lazy
つうかドキュメント読め。
0321315
2006/08/03(木) 17:14:37おお、良い感じですね。
問題はいらなくなった読み込み後のオブジェクトがちゃんとゴミ掃除されるかどうかだけど・・・とりあえずいろいろ読んでみます。
dクス!!
0322デフォルトの名無しさん
2006/08/07(月) 18:33:15INSERT目的なら全カラム必要になるだろうけど、
SELECT目的なら一部のカラムのみで十分なケースってあると思うんです。
例:
BOOKというテーブルはID、名前、著者名、カテゴリ情報、概要等、
本に関する情報を多数持っているが、
検索結果に表示するのは名前だけで十分、という場合。
この時ID、名前以外の情報まで持ってくるのは非効率な気がするのですが、
このSELECT目的に別にBeanクラスを定義するというのはアリでしょうか。
class Book { 全カラム }
class BookForSearchResult { ID, 名前 }
それとも、この程度の効率はO/Rマッピングを使用する以上、
気にしない方がいいんでしょうか。
0323デフォルトの名無しさん
2006/08/07(月) 19:15:38どうしても気になるのなら、IDと名前だけのビューを作って、
そのビューとBeanをマッピングしたらどうでしょう?
0324デフォルトの名無しさん
2006/08/08(火) 01:42:02なんかすがすがしい気分になった。
0325322
2006/08/08(火) 11:09:26なるほど、ビューを対象にするなら違和感ないですね。
カラムを限定するようなケースが発生するのは大概検索画面なので、
わざわざビューを作る、というのもアリが気がします。
ありがとうございます。
0326デフォルトの名無しさん
2006/08/08(火) 19:12:24動かそうとしているのですが、junit test suiteがFailureを出します。
WinXP (SP1)
JDK 1.5.0_06
lib等は、
antは1.6.5を別途導入。junit.jarはojb1.0.4のをcopy
DBはデフォルトのhsqldb (入手したママ)
でるFailure (1件のみ)
testReportPathExpressionForExtent2
check size expected:<2> but was:<0>
(その他実行結果のファイルにはNOT_EXISTテーブルがないとかもでている)
OJBのドキュメント等やMLも読んだのですが、junit testについては
(hsqldb)についてはそのまま動くとのことで、どう修正すれば
動かせるのかどうかわからなくて困っています。
ここでいいのかどうかわからないのですが、よろしくお願いします。
0327デフォルトの名無しさん
2006/08/09(水) 00:20:58ResultSetと同じようなカーソル的な使い方ができるので、
適度にevict()しながら処理すればいいと思われ。
0328デフォルトの名無しさん
2006/08/17(木) 18:09:46簡単な表結合ならSQL書いちゃったほうが早いし
難しい表結合はO/Rまっぱーじゃ結局無理だし。
なにがいいのか俺にもわかるように説明してくれ。
DTO自動で作るだけならエクセルマクロで十分だし。
0329デフォルトの名無しさん
2006/08/17(木) 18:22:18できたのがO/Rマッパー。
むかつかない人はそのままでいいよ。
0330デフォルトの名無しさん
2006/08/17(木) 18:29:30ORMの利点は、「SQLを書かなくていい」ではない。
>DTO自動で作るだけならエクセルマクロで十分だし。
それを「車輪の再発明」と言う。
ダメエンジニアが行う愚行の一つ。
0332デフォルトの名無しさん
2006/08/17(木) 18:35:56個人の趣味で使うものってことでしょうか??
仕事で使うもんじゃないってことでFA?
0333デフォルトの名無しさん
2006/08/17(木) 18:42:12オブジェクトとSQLのマッピング作業をフレームワークがやってくれる点。
0334デフォルトの名無しさん
2006/08/17(木) 18:43:030335デフォルトの名無しさん
2006/08/17(木) 18:46:33まっぱーの利点とか理解できないし。
だから教えてくださいお願いします。
>>333
マッピングってDTOつくって、ResultSetから値を取り出してDTOに入れていくってことですか?
ただそれだけですか?
そこでそんなにバグが出たり工数がかかったりしてるんですか?
0336デフォルトの名無しさん
2006/08/17(木) 19:01:57検索だけじゃなくて、挿入・更新のときのマッピングもね。
DQNかも知れないエンジニアを大量に使わざるを得ないプロジェクトで、
テーブル数が数十個ある場合で、カラムの追加変更などがある場合でも
フレームワークにやらせるよりも手作業の方が早くて確実なら使う必要はないだろう。
0337328
2006/08/17(木) 19:10:21ほんとにそこでみんな困ってるの???
そのあたりって仮にまちがえてもテスト段階でバグ発見しやすい部分だと思うし
そもそもDTOに入れたり出したりするのなんてそんなに大変な作業でも
ないとおもうんですが・・・。
うちのシステムもテーブル150ぐらいあるし、
カラムの追加変更もときどきあるけど
一度に追加変更されるのって2、3テーブルぐらいのものだし
それだけのためにxml書いたりといった面倒な作業が
工数的、費用的ににペイするのかしら??
あたらしいもの好きな人たちが趣味でやってる領域なのでは?
実際に業務に使ってるひといるの???
0338デフォルトの名無しさん
2006/08/17(木) 19:25:27トータルの記述量はあまり減らないし、かえって面倒と感じるだろう。
そこは自動生成するところだよ。
0339デフォルトの名無しさん
2006/08/17(木) 19:32:14S2DAOや、Hibernate Annotation、EJB3はXMLによるマッピング不要だ。
0340328
2006/08/17(木) 19:39:49DTOなど自分でコーディングする工数
システム開発全体にかかる工数から比較したら
これらが締めるのは微々たるものでは?
0341デフォルトの名無しさん
2006/08/17(木) 19:51:09>DTOなど自分でコーディングする工数
ちがう。
テーブル定義からXMLとDTOとを自動生成する工数と
DTOを自分でコーディングおよびSQLとDTOの値の受け渡し処理の
コードを書く工数とその部分をテストする工数の合計だ。
後者の方が早くて確実なら使う必要はない。
0342328
2006/08/17(木) 19:54:00OR mapperに潜んでいるバグのリスクや、
各OR mapperの使い方を覚える工数を考えたら
やっぱ使わないって判断かなあ。
そもそもわざわざ導入したところで削減できる工数が少なすぎるような気が。
あんだけ雑誌やネットで騒がれておきながら
メリットってこんだけなの?
なんかほかにメリットないのかしら・・。
0343デフォルトの名無しさん
2006/08/17(木) 19:54:11って思うなら、それでいいじゃねえか。
俺はDTOを自分で書くなんて冗談じゃねえが。
Hibernate Annotationでハッピーライフ。
0344328
2006/08/17(木) 19:57:38客観的な指標から判断して
どちらが生産性の向上につながるのかが知りたい。
なんでこれだけのものにみんな大騒ぎしてるんだろう?
なんかあるのでは?って思ってしまう。
0345デフォルトの名無しさん
2006/08/17(木) 20:02:51むかつくやり方を続けると、精神衛生に悪くて生産性が下がる。
それだけ。
0346デフォルトの名無しさん
2006/08/17(木) 20:35:55おまいのところがGavin Kingより優秀な開発者を抱えてるならリスクとなり得るなw
0347デフォルトの名無しさん
2006/08/17(木) 20:47:21それは真理だな。
>>344
なんにもないから安心しろ。
頑張って車輪を発明し続けてくれ。
0348デフォルトの名無しさん
2006/08/17(木) 21:04:21マジレスすると、Kingよりも優秀な奴が一人いてもダメだと思う。
HibernateやS2DAOがどれだけの人に動作検証されているのかを考えると、
それ以上の動作検証ができて、はじめて
「OR mapperに潜んでいるバグのリスク」が自作コードより大きくなると言える。
0349デフォルトの名無しさん
2006/08/17(木) 21:37:15自作コードの方が普通は仕様が小さいから、
同程度の品質を確保するのにそこまでの動作検証は要らないけどね。
0350デフォルトの名無しさん
2006/08/17(木) 22:30:32改善手法がデフォルトで組み込まれている。
ORマッパの大部分は関連テーブルのレコードを自動的に取得
できる。
百人がよってたかってデバッグしたコードと、どっかの中小企業が
自分たちのしょぼいプロジェクト用に作って二人か三人でデバッグ
したコードでは、前者の方が信頼性が高い。
ただし1テーブルのデータちょっと取ってくるだけ、しかもテーブル間
リレーションもほとんどない、毎回SQLをコンパイルさせる程度の
負荷などまったく気にしない、とかなら別に使う必要はなし。
0351デフォルトの名無しさん
2006/08/17(木) 22:36:31あくまで、オンライントランザクション処理を簡易化するためのフレームワーク。
万能ではない。
0352デフォルトの名無しさん
2006/08/17(木) 23:09:32それができないプロジェクトは、リプレースするか、捨てるか。どっちかしかない。
0353デフォルトの名無しさん
2006/08/18(金) 00:54:27とりあえず何か動かしてみたりはしたの?
Hibernateなら、ツール使えばスキーマ読み込んで勝手にクラス作成までやってくれるから
一度適当に使って試してみたら?
結局ツール適用のメリット有無なんて、対象システムや開発環境との相性だからな
0354デフォルトの名無しさん
2006/08/18(金) 01:31:01忘れた頃に禿同
オレもエンティティにビジネスロジックを書きたくなってしまう。
GRASPじゃないけど、OO的に考えるなら、データに近いところへ
メソッドを寄せ集めておきたいんだよな・・・
自動生成されたエンティティをサブクラスするのはちとキモイしねぇ
0355デフォルトの名無しさん
2006/08/18(金) 07:19:44>自動生成されたエンティティをサブクラスする
ちょっと意味不明だけど
任意のクラスを継承したエンティティを自動生成できるツールがほとんどだよ
0356デフォルトの名無しさん
2006/08/18(金) 07:48:13クラス継承によるロジック共通化をフレームワーク単位で行うと、クラスの拡張性が著しく損なわれるので
最近は避けられる傾向にある
最近DIコンテナを使った開発で多用されているのが、委譲による疎結合。
その場合はステートレスなロジッククラスが利用される。
これとドメインモデルとの相性がイマイチなのがORマッピング利用時の問題
ORマッパー自体がDIをサポートして、ロジックを委譲するオブジェクトを注入してEntityを作成することが出来れば
ドメインモデルでも疎結合でロジックを構築できるのでは?・・・という話
0357デフォルトの名無しさん
2006/08/18(金) 08:00:02>>354からそこまで読み取れたらネ申だな。
0358デフォルトの名無しさん
2006/08/18(金) 08:42:510359デフォルトの名無しさん
2006/08/18(金) 18:56:370360デフォルトの名無しさん
2006/08/19(土) 00:12:40iBATIS2.2.0って、ストアドプロシージャと
Beanとのマッピング出来るようになったん?
0361デフォルトの名無しさん
2006/09/05(火) 02:43:56アイロボットみたいだな
株ロボもいつか夢を見るようになるのかなぁ
0362デフォルトの名無しさん
2006/09/06(水) 11:11:38[ThinkIT] 第7回:それぞれのメリット/デメリット (1/3)
ttp://www.thinkit.co.jp/free/article/0606/13/7/
0363デフォルトの名無しさん
2006/09/08(金) 15:08:40Hibernateでsessionキャッシュ上の永続オブジェクトに対して
オブジェクト単位での変更チェックは出来ないんでしょうか?
bool Session#isDirty(Object o, ...)みたいなものがあればいいのですが...
0364デフォルトの名無しさん
2006/09/26(火) 00:45:24ストアドプロシージャとBeanのマッピングOK。
サンプル書いて確認とれました。
sqlMap.queryForObject(query, map);
ArrayList list = (ArrayList)map.get("out");
for(int i=0; i<list.size(); i++){ Bean bean = (Bean)list.get(i); bean.getId();}
SpringFrameworkと連携するときは使えないかもしれないけどね。
とりあえず、Map(HashMap)->ArrayList->Beanの順に格納されているので、
1コ1コ取り出さないといけないのがメンドイ。
つーか instanceofで確認取らせんな!( ゚Д゚)ゴルァ!!
0365デフォルトの名無しさん
2006/09/26(火) 01:16:45あいべいてぃす?
0366デフォルトの名無しさん
2006/09/26(火) 01:26:280367デフォルトの名無しさん
2006/09/26(火) 01:36:02ここ読むと
>We pronounce it: eye-BAT-iss
ってあるから、あいばってぃす?
0368デフォルトの名無しさん
2006/09/26(火) 02:22:18グーグルキャッシュに入らないマイコムにも言えるが。
エクセルマクロ生成コードにむかついた人が張り切ってしまってできたのがO/Rマッパーなのはいいが、漏れはO/RマッパーのXMLファイル作成にムカつくのはどうすれば良い?
誰かエクセルマクロからXML生成するツール作ってない?
つーかxlsファイル自体を読み込んでO/Rマッピングしてくれってのが、.NETのノリ?
0369デフォルトの名無しさん
2006/09/26(火) 02:44:42当然みんなつくってんじゅねぇーの?
一々仕様書から写す手間を考えるとそりゃマクロで吐き出させるだろうし。
こういうのってオープンソースで一個作っちゃったほうがいいよーな気もするよな。
0370デフォルトの名無しさん
2006/09/26(火) 08:09:540371デフォルトの名無しさん
2006/09/26(火) 13:10:330372デフォルトの名無しさん
2006/09/26(火) 20:32:49さすがに公開はできんわw
0373364
2006/09/26(火) 21:23:18つーかさ、DBの問い合わせから戻ってきた値が
<parameterMap>のclass要素のオブジェクトにマッピングされるのはいいんだが、
public List findList(String query, HashMap map)throws DataAccessException
{ return (List)getSqlMapClientTemplate().queryForList(query, map); }
↑のコードの意味無いじゃん。↑のメソッドを ArrayList list = (ArrayList)dao.findList(query, map);
で呼び出すんだけど、結局引数に渡したmapオブジェクト変数に格納し直されるっていう動作はどーなのよ。
いいの?これ。
どーいう意味かの解説は ttp://canetrash.seesaa.net/article/2656752.html にあるんだが、動作的にねぇ…?
結局引数に渡したmapからListを取り出して、さらにBeanを取り出して…。
メンドクサーですよ。O/R-Mapperってこんなんなん?いや、動作的にはO/R-Mappingなんだろうけどさ。
識者コメント&ツッコミ・キボンヌ。
0374373
2006/09/26(火) 21:46:39見ると
--------------
sqlMaps で SQL を実行する時のパラメータとして使えるクラスには次のものがあります。
・Bean
・Map
・プリミティブクラス(Integer など)
--------------
ってなってるから、だめだ。Map or Beanじゃないと。orz
0375デフォルトの名無しさん
2006/09/27(水) 07:55:54あーゆーの欲しい。
0376デフォルトの名無しさん
2006/09/29(金) 01:08:11blancoDb だろ。Excel O/R マッパー。
俺はそれを作ってる、いがぴょんっていう奴の顔がキモすぎて
試してもない。違うんかもしれんが。
0377デフォルトの名無しさん
2006/10/07(土) 04:01:15うちの会社に導入しようと思っています。
いまどきJDBCでSQL直書きなんて氏ねばいいと思います。
0378デフォルトの名無しさん
2006/10/07(土) 04:23:210379デフォルトの名無しさん
2006/10/07(土) 08:56:57Hibernateがいいときもあるし、JDBCでSQL書きがいいときもあるし、iBatisがいいときもある。
最高ではない。
0380デフォルトの名無しさん
2006/10/07(土) 09:48:02見聞を広げるちゅー意味でも。
0381デフォルトの名無しさん
2006/10/07(土) 11:13:58Hibernate最高とか言っちゃわない程度には触っておいたほうがいいな。
0382デフォルトの名無しさん
2006/10/07(土) 11:46:240383377
2006/10/08(日) 10:47:35ものすごい工数をかけて作成したフレームワークだ。
Hibernateありきだ。
最初に。
もちろんHibernateではダメだというケースも
あるとは思うが、まずはHibernate最高と思っておいて
問題ないのでは?
0384デフォルトの名無しさん
2006/10/08(日) 11:14:28ものすごい工数をかけて作成した仕様なのだが・・・
0385デフォルトの名無しさん
2006/10/08(日) 11:25:44結局はどれが良いのか客観的に語ってよ。
0386377
2006/10/08(日) 11:26:36どんなシステムでも大抵、JDBCを利用するための
フレームワークを作っているだろうが、
そういうフレームワークとしてHibernateに
勝てるわけがないということだ。
0387デフォルトの名無しさん
2006/10/08(日) 14:01:29DBまわりはWrapperがあるけど
BroadVision6...
0388デフォルトの名無しさん
2006/10/08(日) 14:15:17>勝てるわけがないということだ。
すげぇ盲信っぷりにワロタ。
0389デフォルトの名無しさん
2006/10/08(日) 18:44:47日本の会社が自社で作っていたものとは次元が違う存在というのは言うまでもない。
すべてのケースに適しているとはいえないが、
使ったこともないじゃORマッパーを語れないな。
俺はjar(というか使ってるクラス)があまりにも多すぎるところがいやだな。
入れたら起動も死ぬほど重くなるし、OutOfMemoryにもなりやすい。
サーバーにいくつもHibernateを使ってるWebAppがあったら目も当てられない。
0390デフォルトの名無しさん
2006/10/08(日) 19:11:560391デフォルトの名無しさん
2006/10/08(日) 23:17:11無駄な残業したくないなら要件にフィットするものを選ぼう。
冷静に、冷静に。
0392デフォルトの名無しさん
2006/10/09(月) 01:04:59可能な限り「標準」で行きたいのだけど。
JPAはしばらく安定しないだろうなぁ・・・
0393デフォルトの名無しさん
2006/10/09(月) 03:36:02Hibernate に詳しいようだから、使ってみた感想でいいから
他のいくつかの O/R マッパーと比較して何かいいか
教えてくれないか?
俺には何がいいかさっぱり分からんので。
0394デフォルトの名無しさん
2006/10/09(月) 04:56:36Hibernateのよさは、資料が多いことだな。
俺はCayenne > Hibernateだと思う。複雑なクエリを
HQLで書くのは俺には無理。
0395デフォルトの名無しさん
2006/10/09(月) 05:56:46質問がO/Rマッパーの有用性は
0396デフォルトの名無しさん
2006/10/09(月) 06:29:22O/Rマッパーの有用性はわかるけど、Hibernateの優位性がわからないのか
O/Rマッパーの有用性がわからないのか、どっちなんだ
前者ならJPA実装の中でも枯れてるしData Mapperパターンでは決定版に近いってレスになるし、
後者なら、そうですねってレスになる
0397デフォルトの名無しさん
2006/10/09(月) 11:29:44有用性があるのが前提で、優劣を議論するのがスレの趣旨じゃね?
0398デフォルトの名無しさん
2006/10/09(月) 19:50:13適用範囲を把握するという意味では、
有用性自体を問うのもありだと思ふなり
0399デフォルトの名無しさん
2006/10/14(土) 10:05:46製造期間 10 日、マスタメンテ 3 機能。
DB 設計済み(複合キー)、検索条件は可変多し。
製造担当はたぶん JDBC 直以外知らない。
学習工数、製造工数の少なさを最優先。
JDBC 直、Hibernate、iBatis、DBUtils、、、
0400デフォルトの名無しさん
2006/10/14(土) 10:20:46>学習工数、製造工数の少なさを最優先。
10日間に学習工数も含めるのなら、断然JDBC直。
フレームワークは学習コストがそれなりにかかることを
認識しておかないと痛い目を見る。
それを認識できてない奴が「生産性が低い」と騒ぐんだ。
強いて何か覚えるなら、ORMよりもDbUnitでも覚えておいた方がいいんじゃね?
0401デフォルトの名無しさん
2006/10/14(土) 14:16:27MS Access
0402デフォルトの名無しさん
2006/10/14(土) 14:50:21ギャグのつもりじゃなかったらやめたほうがいいだろう。
0403デフォルトの名無しさん
2006/10/14(土) 15:28:56JDBC 直
0404デフォルトの名無しさん
2006/10/14(土) 16:47:16DBUtilsの方がいいんじゃない?
まあ、10日であることを考えたらJDBC直でもいっか。
悩んでいる暇があったら、早くやれって感じだ。
0405デフォルトの名無しさん
2006/10/14(土) 17:31:45全テーブル同じクラスで処理する。
0406デフォルトの名無しさん
2006/10/14(土) 18:07:12JAVA止めて、お前がLLで作る
0407デフォルトの名無しさん
2006/10/14(土) 23:48:22ちょっとしたもんならJDBC直(or 学習コストがかからん DbUtils)で十分。
後々メンテ担当者がチェンジする時のリスクも小さかろう。
0408デフォルトの名無しさん
2006/10/14(土) 23:57:44DbUnit も知らんとか言ってたな。
一応、俺が Struts 上にアクセス制御、セッション管理、ログ、エラー制御あたりの
共通部を 2 日ぐらいで俺が作って後は任せようかと思ってる。
Click か Wicket も考えたけど 10 日じゃこわいんでやめとこうと思ってる。
>>402
俺はフリーで複数案件やってて60 万で案件とろうとしてるだけだ。
60 万ぽっちじゃ、10 日ぐらいでやらんと割りにあわんだろ。
部下の勉強がてらに良いと思ったんだけど意見を聞きたかった。
>>404
JDBC 直で close し忘れ防止は Session in View パターンで
ServletFilter でも作るわ。
>>405
結果は Map に格納すんの? リフレクションで Bean?
昔作ったような気もするけど、それだったら何かあるやつ使うかなー。
0409デフォルトの名無しさん
2006/10/15(日) 00:08:49勉強がてらなら、もっと納期が厳しくない案件でやらせた方がよくない?
確実に作らせたいのなら、担当のスキルと日程をふまえて指示する側が見極めないとな
あと、DbUtilsにするんなら、1.0は色々問題があるからdevelop版を使ったほうがいい。
0410デフォルトの名無しさん
2006/10/15(日) 00:33:13function! AllRead(...)
while args
r args
endwhile
endfunction
どうすればいいでしょうか?
0411デフォルトの名無しさん
2006/10/15(日) 00:50:59thx。DbUtils か JDBC にするわ。
0412デフォルトの名無しさん
2006/10/15(日) 00:52:05何のハナシをしているのかわかりません
0413デフォルトの名無しさん
2006/10/17(火) 13:36:28Hibernate Annotations も Hibernate EntityManager も同時に 3.2.0 GA
0414デフォルトの名無しさん
2006/10/17(火) 18:53:380415デフォルトの名無しさん
2006/10/17(火) 23:30:510416デフォルトの名無しさん
2006/10/18(水) 00:07:08ぬるぽ
0417デフォルトの名無しさん
2006/10/22(日) 21:05:50結合テーブルのSQLなんかのとき都度それにあった結合テーブルクラス(必要なカラム以外もすべて定義)を使って結果を返していた
つまり結果は絶対SQLのと同じ表形式だったわけなんだけど
普通そういう設計するの?
0418デフォルトの名無しさん
2006/10/22(日) 21:10:26と同僚が言ってた。代理キーはシーケンスで振っていくようにするといってたけど
そうすっと一意制約が保障できないような気がするが、回避方法あるのかい?
0419デフォルトの名無しさん
2006/10/22(日) 21:19:31UNIQUE制約ってしってるか?
PRIMARY KEYとは別にUNIQUE制約をかければいいだけだよ。
0420デフォルトの名無しさん
2006/10/22(日) 22:18:09そりゃそうだ。なんできずかなかったんだろ。ありがとござんした
0421デフォルトの名無しさん
2006/10/22(日) 22:18:15一意になるように代理キーで、作るべきだと思うけど。
0422デフォルトの名無しさん
2006/10/22(日) 22:19:52ごめん
0423デフォルトの名無しさん
2006/10/22(日) 22:23:01例えば、どうなってほしいの?
クラスを作るのが面倒ならば、Mapを使ってもよいと思うが、そうなるとタイプセーフではなくなる。
0424デフォルトの名無しさん
2006/10/22(日) 22:56:42あーたとえばですね、親子関係のテーブルなんかの場合
親テーブルクラスに、子テーブルクラスを保持するフィールドもたせて
クエリーの結果をそういう感じで保持すんのかな?とおもって。
0425デフォルトの名無しさん
2006/10/25(水) 23:30:26Map のリストで受け取ることってできますか?
Hibernate を使わなければならず、
でも結果は Map で返さんとだめで、
entity クラスも作成できないんです。
0426デフォルトの名無しさん
2006/10/25(水) 23:31:470427デフォルトの名無しさん
2006/10/26(木) 00:59:39たぶん駄目じゃない。
Spring使ってるならJdbcTemplate。ないならDbUtilsでごまかしとけば。
0428デフォルトの名無しさん
2006/10/26(木) 01:38:43助かりました。
JdbcTemplate#queryForList
でごまかせるような気がします。
0429デフォルトの名無しさん
2006/10/26(木) 02:16:00Mapによるマッピングには対応している
http://www.hibernate.org/hib_docs/v3/reference/en/html/persistent-classes.html#persistent-classes-dynamicmodels
0430デフォルトの名無しさん
2006/11/02(木) 00:22:59使いたいのだけど、1.0はだめだって聞いたんだけど。。
他のがいろいろでてきたからもう開発ストップしてるんかな。
0431デフォルトの名無しさん
2006/11/02(木) 02:12:45dbutils、シンプルで使いやすいから愛用してるんだけど
あんまり使ってる人いないのかな?
0432デフォルトの名無しさん
2006/11/02(木) 03:48:26個人的にはQueryRunnerがPreparedStatementを
基本、隠蔽する方向になってるのが何だか惜しいって印象。
まあ、そうしてもらうと楽な面も、もちろんあるんだけど。
0433デフォルトの名無しさん
2006/11/03(金) 02:24:54俺も愛用している。
設定ファイルいらずだし、MapListHandlerの結果をJSP内のELで使うと超ラクで気に入ってます。
0434デフォルトの名無しさん
2006/11/03(金) 08:33:31マッピングが普通とちがうのがちょっとなぁ。あれは直してくれんかな。
0435デフォルトの名無しさん
2006/11/03(金) 14:55:01普通と違う?
0436デフォルトの名無しさん
2006/11/03(金) 18:02:240437デフォルトの名無しさん
2006/11/03(金) 21:53:02フィールド名/プロパティ名が2語以上から成るとき、DBでは通常アンダースコア連結、
Javaはキャメルケースで表記するでしょ?
他のORMにはそこを変換してくれるものもあるけど、dbUtilsは単にcase-insensitiveで
比較するだけだから、
SELECT ID_DATA AS IDDATA
とか、
public void setId_Data() {
とか書かないといけない。
0438デフォルトの名無しさん
2006/11/03(金) 22:48:00commons BeanUtilsのリフレクション使いまくりだから、目に見えて遅い。
大規模・高負荷なシステムでは使えない。
けど、シンプルで俺は好き。
自社のお問い合わせ送信フォームとか、
小規模なマスタメンテとかで使ってみたことがある。
0439デフォルトの名無しさん
2006/11/03(金) 23:38:04DbUtils以外のORMはリフレクションを使わずに、Beanにどうやって格納したりしているの?
キャッシュが高速なのは分かるのですが、逆に古いデータを読んでしまうことにならないかも気になります。
0440デフォルトの名無しさん
2006/11/03(金) 23:53:58キャッシュとDBの同期化をどうするかというAPIも用意されている場合も多いので
アプリケーション側でも制御できるし、デフォルト設定も変更可能な多い。
リフレクションを使わず、バイトコードをゴニョゴニョしたりするフレームワークも多い。
0441デフォルトの名無しさん
2006/11/03(金) 23:57:27>キャッシュが高速なのは分かるのですが、逆に古いデータを読んでしまうことにならないかも気になります。
何か勘違いしてるんじゃないか。
0442デフォルトの名無しさん
2006/11/04(土) 00:37:41バイトコードを変えることで、リフレクション使わずにセットしてたりするのか。
それは知らなかった。かなり高度なことをしているんだな。
>>441
こう考えているんだけど、勘違いしてると思った点を教えてくれれば幸い。
キャッシュを使えば、DBにアクセスすることなく、取得済みのデータを再利用するので、高速だと思っている。
「古いデータを〜」と思ったのは、データがすでに更新されたのに、
更新前のキャッシュデータを使ってしまうことがないのか?ということを気にしている。
なんか間違ってるだろうか。
0443デフォルトの名無しさん
2006/11/04(土) 00:42:51>更新前のキャッシュデータを使ってしまうことがないのか?ということを気にしている。
ここの意味がよくわからん。
ひょっとして、複数のサーバでそれぞれ同一DBに対して
接続するとか、そういう使用法を考えてるわけ?
0444デフォルトの名無しさん
2006/11/04(土) 01:01:50DbUtils から BeanUtils への依存関係はないんじゃない。
0445デフォルトの名無しさん
2006/11/04(土) 01:04:14>>444じゃないけど、普通は考えるでしょ。
0446デフォルトの名無しさん
2006/11/04(土) 01:07:56すまん。勘違いしていたらすい。
リフレクションAPI直叩きだね。
0447デフォルトの名無しさん
2006/11/04(土) 01:07:56キャッシュってのは、DBの複製的な情報を、アプリ側で保持するわけでしょ。
検索→キャッシュ生成→(他スレッドなどがDB更新)→キャッシュの値は更新前の値のまま
もちろん、ORMを使わず更新するとかが、論外なのは分かっているけど。
ここまで書いてきて気づいたのだけど、
1つのDB接続セッション内で、キャッシュされるのかと思ったけど、
全体でキャッシュを共有して持っているということ?
それならば、「更新前のデータを見ない」という意味は、理解できる。
0448デフォルトの名無しさん
2006/11/04(土) 01:30:13それともEJBのことを指しているのか?だとしたら意味が違うと思うが
0449デフォルトの名無しさん
2006/11/04(土) 01:31:24~~~~~~~~~~~~~~~~~~~~~~~
これ何よ。こんなことするなよ。
0450デフォルトの名無しさん
2006/11/04(土) 01:34:370452デフォルトの名無しさん
2006/11/04(土) 01:44:571次キャッシュ(Session)は一つのスレッド・トランザクションに閉じてる
自分でアクセスしたエンティティを再利用するだけだから遅延はない
2次キャッシュは複数のスレッド・トランザクションで共有されて実装を選択できる
2次キャッシュの実装に分散キャッシュを使えば複数のプロセスでも共有できる
遅延に関しては実装次第
一定時間でリフレッシュするのもあれば他プロセスから更新通知を受けるのもある
分散ロックや分散トランザクションをサポートしたものもある
当然遅延とパフォーマンスはトレードオフだから用途に合わせて実装を選べばよろし
0453デフォルトの名無しさん
2006/11/04(土) 02:00:11そうじゃねーべ。
Hibernateでも何でもいいから一旦勉強してくれ!
0454447
2006/11/04(土) 02:06:22なるほど。
1次キャッシュなら、遅延は無いものの、キャッシュとしての効果は薄いと思うし、
2次キャッシュは、どうしても遅延が発生するだろうと感じていたのです。
キャッシュを利用して高速になるからといって、やはり遅延することを無視できないわけですね。
>>441の話だと、遅延があり得ないように、聞こえたので疑問に思っただけです。
>>453 ごみんなさい。勉強しときます。
0455デフォルトの名無しさん
2006/11/04(土) 02:13:46更新前に一旦SELECTして同期するようになっている。
DBを他システムからも操作されることが想定される場合には
SELECTを含むクエリ発行のたびに毎回キャッシュと同期化するようにもできる。
他システムから操作されないのなら、キャッシュを最大限に利用する設定にすることも出来る。
0456デフォルトの名無しさん
2006/11/04(土) 11:04:04リフレクションやっぱ遅いのか。
ユーザ数の少ない業務アプリケーションしか作ったことないから、
SQL以外の速度気にしたことないな。。
0457デフォルトの名無しさん
2006/11/04(土) 11:10:57>438はまともにプロファイリングしたことないかな?
相当いびつな使い方をしない限り影響はない。DBのそれと比べると誤差の範囲。
0458デフォルトの名無しさん
2006/11/04(土) 12:31:30DbUtils だけど、キャッシュはともかく、遅延ロードが無いことに関しては
ナマSQLを書く以上、SQLの書き方/コーディング次第な所なんで
大規模・高負荷なシステムで使えんって理由には直結しないんじゃないかな。
0459デフォルトの名無しさん
2006/11/04(土) 14:10:330460デフォルトの名無しさん
2006/11/04(土) 16:02:20使うのを躊躇するけどな。
キャッシュがあるといっても、このレベルじゃ到底信用できないし。
実際そういうところに使っている人いる?
俺の場合、パフォーマンスが必要なところでは基本JDBC直、得失を考慮したうえで
問題ない部分ではdbUtilsを使って楽をしてもいいかな、という感じ。
Hibernateを使うのは、パフォーマンスをあまり気にする必要がないところで
ちょっと複雑なデータを永続化したい場合だな。
0461デフォルトの名無しさん
2006/11/04(土) 16:26:06大規模システムでの利用を前提にしたプロダクトだと思うけど。
0462デフォルトの名無しさん
2006/11/04(土) 16:42:50パフォーマンスクリティカルな案件じゃ
JDBC直(+軽いラッパ)が実状じゃなかろうかと
0463デフォルトの名無しさん
2006/11/04(土) 21:51:05大量データ一括処理のバッチなのかで大きく違うよね
前者ならHibernateの2次キャッシュが活用できそうだし
後者はやはりJDBC直書きか(というかストアド使えるならそっち使った方がいいかも)
>>462
分散前提のEJB2と分散前提ではなくなったEJB3は大きく異なる。
更に、EJB3からも独立したJPAは分散とは無関係
0464デフォルトの名無しさん
2006/11/04(土) 23:04:370465デフォルトの名無しさん
2006/11/04(土) 23:05:40検討しているんだけど、どれがいいの?
個人的には
通常:Hibernate
バッチ、複雑なSQL:JDBC直
かなあ
0466デフォルトの名無しさん
2006/11/04(土) 23:17:23バッチには向いてないだろうね。
>>465
あなたの見解は正しいと思う。
Torqueは論外。
0467デフォルトの名無しさん
2006/11/04(土) 23:27:07Webアプリなんかじゃ、ふつーに別スレッドに更新されることが、あるんじゃねーの?
0468デフォルトの名無しさん
2006/11/04(土) 23:47:26遅いし、馬鹿だし、救いようがないな
0469デフォルトの名無しさん
2006/11/04(土) 23:48:32あるよね。
0470デフォルトの名無しさん
2006/11/04(土) 23:49:05自分で選べないくらいプロダクトの特性を理解してないなら
どれを選んでも失敗する
0471デフォルトの名無しさん
2006/11/05(日) 00:14:540472デフォルトの名無しさん
2006/11/05(日) 00:53:17バッチ系にもWEB系にも使えるものてのは、ありそうでないもんだな
0473デフォルトの名無しさん
2006/11/05(日) 01:04:430474デフォルトの名無しさん
2006/11/05(日) 05:12:40複雑なクエリ文を、しこしか書いている人たちに、HQL使えって言うのは厳しいし、
無理して使ってもらうこともないんだけど。
Hibernate最高って人は、
(実行パフォーマンスに目をつぶっても)開発側が楽だから?
それとも、(開発は多少面倒になるが)実行時に効果的だから?
もしくは、その両方?
0475デフォルトの名無しさん
2006/11/05(日) 07:38:32JPA/JPQLを使えよ。
0476デフォルトの名無しさん
2006/11/05(日) 15:30:26ある程度保障されるものだし、何とも言えないんじゃ。
ただ、コンパクトなJDBCラッパだけで色々な案件を
問題無く捌けてりゃ、それはそれでハッピーだとは思う。
0477デフォルトの名無しさん
2006/11/05(日) 19:30:17実行パフォーマンスについては、上手く作ればWebアプリ等では逆に早くなることもある。
開発に関しては、たしかに覚えることは多いが、
リスナーを使ってDBのトリガーみたいな処理をプログラムを使って書けたりとか、
あとは特に排他制御実装が非常に簡単になるのが嬉しい
SQLも使えるから、難しいところは無理にHQL使わずに積極的にSQL使えばいいし
(FROM句への副問い合わせやUNION以外はだいたいHQLで書けるけど)
0478デフォルトの名無しさん
2006/11/05(日) 19:36:19一覧を取ってくる所は複雑な問い合わせ文になることが多いから
SQLをORMに投げて結果をBeanのListで受け取る。
1件選ぶ処理では主キーを渡してORMでEntityを受け取る。
そこから先はORMの機能だけで関連Entityを取って来たり、
排他制御しつつ更新処理とか全部やってくれる。
0479デフォルトの名無しさん
2006/11/05(日) 20:09:47任せるものと違うの?
0480デフォルトの名無しさん
2006/11/05(日) 22:28:55更新時の自動バージョンカラムチェックとかやってくれるのか?w
0481デフォルトの名無しさん
2006/11/05(日) 22:37:530482デフォルトの名無しさん
2006/11/06(月) 00:30:31Seasarのリスクを受容出来るなら、S2DAOと必要に応じてストアドあたりが、
いい感じだな。
0483デフォルトの名無しさん
2006/11/06(月) 10:24:170484デフォルトの名無しさん
2006/11/06(月) 17:20:38SQLではなく短に文字列として処理されるのでしょうか?
さらにibatisは$xx$はプリペアードステートメントの「?」で、#xx#はSQLとして展開ですよね?
0485デフォルトの名無しさん
2006/11/11(土) 21:23:42hibernate annotation 3.2
hibernate tool 3.2
Eclipse 3.2
な環境でPOJO(アノテーション付き)からその他もろもろを生成したい。
0486デフォルトの名無しさん
2006/11/12(日) 08:41:06今普通にそれでやってる。その他もろもろってDDLくらいしかなくね?
とりあえずHibernateのサイト見ればできるようになんだろ。
0487デフォルトの名無しさん
2006/11/12(日) 08:46:53早くリリースされないかなぁ。
0488デフォルトの名無しさん
2006/11/18(土) 13:49:05ibatis、dbutils何でもいいのですが・・
0489デフォルトの名無しさん
2006/11/19(日) 11:55:54とりあえずカンマの前後で改行入れる程度のものなら
自分ででっち上げる方が早い気もする。
0490デフォルトの名無しさん
2006/11/19(日) 14:14:390491デフォルトの名無しさん
2006/11/20(月) 04:29:31Hibernate Toolsを使って.hbm.xmlと.javaを自動生成させた。
one-to-oneになって欲しい部分がone-to-manyになっている。
困った。
0492デフォルトの名無しさん
2006/11/20(月) 10:00:20すいません。ツールは知っているのですが、管理者からPG側から整形済みをログで吐き出せといわれていまして・・・
0493デフォルトの名無しさん
2006/11/20(月) 10:16:390494デフォルトの名無しさん
2006/11/20(月) 18:45:260495デフォルトの名無しさん
2006/11/20(月) 18:57:18その自称管理者がクソ
0496デフォルトの名無しさん
2006/11/27(月) 01:29:48マニュアルとか見ると、一般的なやり方として
load -> データ変更 -> update
しかないみたいなんですがWebアプリだとloadとupdateの間に
画面遷移が入るのが普通ですよね.
・最初にloadしたデータをセッションにでも入れておく
・updateのときにもういっかいloadする
・loadはせず、自分でオブジェクトを生成してidや全てのプロパティを手動で設定
どんなふうにやるもんなのでしょうか.
0497デフォルトの名無しさん
2006/11/27(月) 01:33:40の後、データを再度トランザクションにくくりつける。
・updateのときにもういっかいloadする
は、勝手にやってくれる。
0498デフォルトの名無しさん
2006/11/27(月) 01:38:35前の画面で取得したEntityをsessionなどに保持しておいて
Session(Hibernate Core)使うならupdate
EntityManager(Hibernate EntityManager)使うならmerge
手動で再loadとかすると、排他制御をHibernateに任せられなくなるので
お勧めできない
ちなみに、同一トランザクション上なら、取得したEntityは
値を変えるだけでUPDATEされるので、updateメソッド使う必要はない
ここを間違ってupdateメソッド使うかのように書いてる本が多いので、騙されないように
0499496
2006/11/27(月) 03:00:40セッション管理がいやなので更新時再loadでやろうと思ってました...
ブラウザのウインドウをいくつも開いて同時に編集というのを
許可する場合はどうするんでしょうか?
entityの種類とidごとに別のキーでセッションに入れたりして、
セッション内に作業中entityをどんどん保存/updateしていく
という感じになるんでしょうか.
0500デフォルトの名無しさん
2006/11/27(月) 06:50:21まあ要求するのは良いが、それならおまいが管理までやれって返されるだけだよ(w
やぶ蛇にならないようにガンガレ。
0501デフォルトの名無しさん
2006/11/27(月) 09:13:01ログは、基本一行で全部出して欲しい派。
正規表現で取り出しやすくなるし。
0502デフォルトの名無しさん
2006/12/06(水) 02:35:470503デフォルトの名無しさん
2006/12/07(木) 02:23:140504デフォルトの名無しさん
2006/12/07(木) 02:38:46http://www.onjava.com/pub/a/onjava/2006/08/02/jjdbc-4-enhancements-in-java-se-6.html
0505デフォルトの名無しさん
2006/12/07(木) 22:45:10いつも思うんだけど、Hibernateで排他制御を任せると、
複数サーバでの運用って事実上無理にならない?
JavaVM1つでしか動きを保障できないようなフレームワークが
なぜこんなに流行るのかわからない。
0506デフォルトの名無しさん
2006/12/07(木) 22:58:32大規模案件はやっぱりEJBの出番なんでしょう。
0507デフォルトの名無しさん
2006/12/07(木) 23:18:00普通にHibernate経由でDBロック取ればいいじゃん。
API提供されてるし。
>>506
なんでEJB?
0508デフォルトの名無しさん
2006/12/07(木) 23:24:000509507
2006/12/07(木) 23:33:33ちょっと喧嘩売ってるみたいな書き方になった…
補足すると、そもそも並列稼動の実装ってかなり設計に依存するから
安易に大規模案件=EJBを持ち出す意味がわかんないって話。
単純なスケールアウトの話で、VMをまたいだキャッシュの同期を
意図してたならHibernateでもいくつかサポートしてるキャッシュ実装があるよ。
※Coherenceとか
ま、JBossのEJBって話だったら別に変わんないか。
0510デフォルトの名無しさん
2006/12/08(金) 00:27:16Hibernateの排他制御は基本的に楽観的排他で、
UPDATE文発行するときに、検索条件に主キー+バージョンカラムの値をつけ、
UPDATEの結果が0だったら排他エラーにするものだよ
同期を取っているのはあくまでもDBで、JVMは関係ないと思うけど
2次キャッシュに対する更新は、たしかに複数サーバでの運用が問題になるが
そんなときはクラスタ対応のJBoss TreeCacheを使えばいい
0511デフォルトの名無しさん
2006/12/08(金) 01:02:00へー、そうなのか。勉強になった。
どちらにせよ、最近は状態を頑張って各ノードで通信して同期するより、
なるべく状態非依存にしてスケールアップする方向に進んでるから、
Hibernateの挙動はあまりいくないと思う。
0512デフォルトの名無しさん
2006/12/08(金) 01:33:17参考までに聞きたいのだが、状態を持たない場合、複数画面の排他制御ってどうやってやるのが普通なの?
主キー+バージョン値だけを保持して、バージョン値も条件に入れて再SELECTとか?
ただこの場合、関連するEntityを同時に再SELECTする場合、全部のバージョン値を保持しなきゃいけなくなるよね
自分もHibernate使っていたとき迷ったのだが、結局HttpSessionに保持してmerge以外に良い方法を思いつかなかった
0513デフォルトの名無しさん
2006/12/08(金) 02:15:47Hibernateの挙動というよりは、単に2次キャッシュを使わなければ良いだけでは?
OptimisticLockも2次キャッシュ同様にデフォルトでは有効でないから
そこに文句をつけるのは違うと思う。
> どちらにせよ、最近は状態を頑張って各ノードで通信して同期するより、
> なるべく状態非依存にしてスケールアップする方向に進んでるから、
これ、そうなの?クラスタ系プロダクトの信頼度が上がってくるのはこれからじゃないのかな。
あと、下のケースはスケールアウトと間違えてない?
0514デフォルトの名無しさん
2006/12/12(火) 18:52:080515デフォルトの名無しさん
2006/12/13(水) 23:35:57OpenSessionInViewパターン的な仕組みとやりとりするカスタムタグを
作るってことなら、そんなに悩まずできるんじゃないの?
iBatisだろうとHibernateだろうと生Jdbcだろうと。
おれなら半日で作るね。
0516デフォルトの名無しさん
2006/12/13(水) 23:44:540517デフォルトの名無しさん
2006/12/14(木) 00:06:28としていたら半日なんてあっという間。
0518デフォルトの名無しさん
2006/12/14(木) 01:45:160519デフォルトの名無しさん
2006/12/15(金) 11:03:54クラスに定義してあるメソッドの実行コードもメモリから消えちゃう?
Cをやっていたとき、実行コードはメモリのtextにロードされるから、
textエリアは書込み禁止なはずなので・・・、javaでは実行コードはtextに書かないのかな
0520デフォルトの名無しさん
2006/12/15(金) 12:26:48スレ違いなので簡単に。詳細は別スレで語って。
ttp://www.nminoru.jp/~nminoru/java/class_unloading.html
0521デフォルトの名無しさん
2006/12/23(土) 01:54:12コストかけても商用のEJBフレームワークを採用した方が、ロードバランサも不要で安くつく。
syslogやsnmpで監視しても、最後はopenviewのSQL DBに突っ込んでるしねえ。
加工することを考えると、SQL DBにログを突っ込むのは悪くはない。
syslogのテキスト処理しか出来ないperl廚が困るだけでしょ。DBIぐらい覚えろよと。
0522デフォルトの名無しさん
2006/12/23(土) 02:10:020523デフォルトの名無しさん
2006/12/23(土) 04:50:43知ったかぶり乙。
0524デフォルトの名無しさん
2006/12/23(土) 08:45:01ある種の才能。
0525デフォルトの名無しさん
2007/01/08(月) 12:20:520526デフォルトの名無しさん
2007/01/17(水) 22:43:070527デフォルトの名無しさん
2007/01/18(木) 00:00:12java.sql.Connection#setTypeMap で型マップの上書きができるのは、分かったのですが・・・。
0528デフォルトの名無しさん
2007/01/18(木) 02:01:48いまいちわからん。
検索条件が複雑なユースケースがたくさんの場合、メソッドの引数やDTO
だとすげー煩わしくなってくるんだけど、みんなはどう対応してる?
0529デフォルトの名無しさん
2007/01/18(木) 23:59:20検索はほぼDTOですね。。
あとで変更があっても影響範囲極小にできるから
0530デフォルトの名無しさん
2007/01/19(金) 01:26:04うぇーって感じだけど、DTO 書きが面倒というような規模
(ビューからDAOまで自分一人とか)なら、Map は割と現実的な
解だと思ってる。
0531デフォルトの名無しさん
2007/01/19(金) 01:29:16Velocityとjava.sql.ResultSetMetaData使えば結構簡単に作れそうな気がするけど。
一時期作ってたけど、
同僚のマの人がせっせこ作ってくれるんで途中で投げた。
0532デフォルトの名無しさん
2007/01/19(金) 01:58:10基準とかあるのか?
0533デフォルトの名無しさん
2007/01/19(金) 02:01:170534デフォルトの名無しさん
2007/01/19(金) 12:18:29JPAとかこれから普及すると思うが、テーブル単位で扱うのが常識なのだろう
RDBに慣れた人ならjoinつかって重複するデータ部分も生成してすべてOneToOneでつなげれば今までと同じように使えるし
既存コードからの変更はわりと容易
0535デフォルトの名無しさん
2007/01/19(金) 19:14:25ORマッピングフレームワークにはHibernateやToplinkなどが一昔前からあり、
最近JPAというものが登場し、JAVAEE5、SE6にも取り込まれている。JPAはEJB3.0でも使用されている。
JPAはコアの部分にtoplinkを使っていてtoplinkエッセンシャルと呼ばれる?
なんかよく分かんないのですがあってます?
0536デフォルトの名無しさん
2007/01/19(金) 20:00:39まずJPAはEJB3.0の中のひとつ
ただし、JavaSEでも使えるように独立している
toplinkはJPAの実装のうちのひとつででリファレンス実装となっている
サーブレットコンテナのリファレンス実装だったTomcatと同じような位置づけ
0537535
2007/01/19(金) 20:32:39ありがとうございます。
なんとなく理解できました。
EJB3.0の中にいたJPAは独立可能なのでSEにも加えられて、
toplinkとJPAの関係は Myfacesとjsfみたいなもんというわけですね。
めもめも
0538デフォルトの名無しさん
2007/01/19(金) 21:13:280539デフォルトの名無しさん
2007/01/19(金) 23:56:48取り出したレコードがコード値(性別とか)を保持している場合、0 -> 男性 などのマッピングはいつ行えばいいのでしょうか。
あとDTOにコード値とマッピング後の文字列、両方を保持するのが一般的なのでしょうか。
0540デフォルトの名無しさん
2007/01/20(土) 00:03:15enumうまく使えたら良いのかな?
0541デフォルトの名無しさん
2007/01/20(土) 01:15:37DTOにマッピングの文字列を取得するメソッド作成するかな。。
確かにこういうの迷いますよね。。
0542539
2007/01/20(土) 11:34:33SQLのFromにだらだらと並べるのも嫌だし。。。
今のところマスタ系のデータはグローバル領域で保持して、View(jsp)でマッピングするという流れになっています。
0543328
2007/01/21(日) 02:02:350544デフォルトの名無しさん
2007/01/21(日) 21:32:580545某スレ167
2007/01/22(月) 01:48:20HibernateはどーしてもあのHQLとXDocletが好きになれず、Seasar2+S2Daoをしばらくいじってみましたが、Spring Remotingにかなりクラっと来て、他のORMももう少し深く調べてみようと思いました。
PHPな人でもあるので、両方で(ある程度)知識を共用できるORMということでS2Daoとblanco、DI×AOPするならS2Daoという筋道で選択しましたが、Hibernateにコストをかけるべきかで少々迷っていますが、どんなモンでしょう?
今のこころは、とりあえずはDbUtilsやSpringJDBCを手早く身に付けておいて、続きはJPAというふうにしたほうがいいかな?、と思っています。
今日買ってきた「Spring2.0入門」を読んだ限りでは、ActiveRowMapperが正式リリースされればSpringJDBCはかなり使い勝手がよいという印象を持ちました。
自分でいくつかDAOを書いた限りでは、結局1:Nマッピングや複雑なビューの生成は自分で書くしかない、って思ってしまうんですよねぇ。
設計がまずいだけかもしれませんが、結局はそのあたりもビジネスロジックとは完全には無縁ではいられないのだから、1テーブル/1レコードをそのまま扱うDAO/DTOを基底クラスとして作って、
テーブル同士の関連は(ある程度のビジネスロジック込みで)ファサードとして纏める、なんてことをしてしまっています。
もっとも、これはあまり深くまで勉強せず、かじったどころか舐めた程度でしかない者の浅はかな感想かもしれませんが……。
追伸
それでもSeasar2の自動コンポーネント登録/自動アスペクト登録にはまだ魅力を感じています。ありゃ便利です。
人はこうやってSeasarの重力に魂を引かれていくのか……(苦笑)
ま、これは本当の余談ですけどね(^^;
0546デフォルトの名無しさん
2007/01/22(月) 02:07:54Hibernateを今から覚えるぐらいなら、JPAを覚えて、
HibernateはJPA実装として使うという位置づけでいいんじゃないか?
0547デフォルトの名無しさん
2007/01/22(月) 18:59:48Hibernate使ってる身としては、もう1:Nマッピングとかを自分で書く気にはなれないな
DBの定義に関する情報は、フレームワークがスキーマ読み込んでクラスまで自動作成すべき
たしかにHibernateの学習コストの高さはネックだけど、
JPAが出たおかげで、マッピング周りはかなり簡単になったと感じてる
0548デフォルトの名無しさん
2007/02/08(木) 10:01:150549デフォルトの名無しさん
2007/02/18(日) 16:37:270550デフォルトの名無しさん
2007/02/19(月) 22:28:19abatorConfigでsqlMapを自動生成するとかなりいろんな条件いれてくれたり、XXXExampleとか作られるのがうざいんだけどなんとかならない?
0551デフォルトの名無しさん
2007/02/24(土) 13:02:37いちいち関連を定義しないと外部結合できないのはなんとかならんのか。
0552デフォルトの名無しさん
2007/02/24(土) 14:48:47それがあるから、Entityに関連書きまくることになるんだよなぁ
0553デフォルトの名無しさん
2007/02/25(日) 01:51:51DBFluteとDolteng はSQLからS2Dao用のDTOを生成してくれるよ
0554デフォルトの名無しさん
2007/02/25(日) 12:14:08そりゃあもちろん、SELECT文はDTOを出産しない>児童生成
0555デフォルトの名無しさん
2007/02/26(月) 10:36:090556デフォルトの名無しさん
2007/02/26(月) 12:29:29SQLを意識するならHibernateを使わないほうが良いと思われる
むしろXMLで定義するだけでオブジェクト間関連を永続化してくれるのはありがたいと思え
0557デフォルトの名無しさん
2007/02/26(月) 15:47:06永続層がたまたまRDBでしたって感じで使わないと
無駄に時間かかるだけだな・・
何故俺の行く先はロクに正規化もされてない神聖不可侵な
クソスキーマがアプリオリに存在してるのばかりなのはなんでなんだぜ。
0558デフォルトの名無しさん
2007/02/26(月) 15:53:29っ「転職」
0559デフォルトの名無しさん
2007/02/27(火) 23:38:39たぶん、>>557の転職先でも、同じようなDB設計になるはずw
つまり、それは運命www
0560デフォルトの名無しさん
2007/02/27(火) 23:43:16外部結合と、SQLを意識するしないは関係ないよ。
(SQL特有のものだったら、そもそもHQLにouter joinなんて単語は出ない)
単に機能が不完全なだけ。実装が面倒だったんだろ。
内部結合は関連なくてもできるしね。
0561デフォルトの名無しさん
2007/02/28(水) 01:21:12普通なら結合条件つけなくていいと思うんだが・・
0562デフォルトの名無しさん
2007/02/28(水) 02:44:43FETCH JOINで使ったり、SELECT new ...()で外部結合テーブルのカラムを含めるときに
普通に使ってるが、なぜつけなくていいと思ったの?
0563デフォルトの名無しさん
2007/02/28(水) 22:16:10お前、全然オブジェクトで考えられてないのなwww
0564デフォルトの名無しさん
2007/03/01(木) 00:19:50考えられてないでいいけど、なぜつけなくていいと思ったの?
0565デフォルトの名無しさん
2007/03/01(木) 00:35:19オブジェクト中心に考えてるとつけなくていいから
0566デフォルトの名無しさん
2007/03/01(木) 00:36:28HibernateってORマッピングフレームワークだぞ。
Object-RDBだぞ。
Object中心に考えないとおかしい使い方になる
0567デフォルトの名無しさん
2007/03/01(木) 01:08:45N+1セレクト問題を避けるため、関連を全てLAZYで定義して
HQLのFETCH JOINを使うのがHibernateの常套手段
また、レポートクエリをEntityのみで無理矢理行うのは馬鹿げている
HQLならSELECT new、またはSQLQueryで普通にSQL発行すればいい
全てをEntity中心に行うのは無理で無駄。
Entityは排他制御+登録・更新処理で威力を発揮する。
レポート機能はSQL中心に考える。適材適所で使えばいいんだよ
0568デフォルトの名無しさん
2007/03/01(木) 11:58:30俺ならレポート部分はJDBC使う
0569デフォルトの名無しさん
2007/03/01(木) 11:59:41> HQLのFETCH JOINを使うのがHibernateの常套手段
どこかに資料ありますか?
0570デフォルトの名無しさん
2007/03/01(木) 15:08:26Hibernate in Action
0571デフォルトの名無しさん
2007/03/01(木) 21:21:240572デフォルトの名無しさん
2007/03/01(木) 22:31:13そーゆー時には統計に優れれた言語であるSQLを使うのがやっぱり正しい。
0573デフォルトの名無しさん
2007/03/02(金) 09:18:320574デフォルトの名無しさん
2007/03/02(金) 12:31:060575デフォルトの名無しさん
2007/03/02(金) 13:11:16Object の永続層に RDB 使うためのマッピングフレームワークではなく、
RDB が先にあって、プログラミング言語から簡単に使うためのフレームワークなのでは。
0576デフォルトの名無しさん
2007/03/02(金) 13:45:57となるならJDBCRowSet使えばいいじゃない
0577デフォルトの名無しさん
2007/03/02(金) 15:25:120578デフォルトの名無しさん
2007/03/02(金) 15:52:080579デフォルトの名無しさん
2007/03/02(金) 15:59:260580デフォルトの名無しさん
2007/03/02(金) 16:35:48データをハンドリングする部分がオブジェクト指向で書ければ、
データそのものは生っぽくてもいいよ。
0581デフォルトの名無しさん
2007/03/02(金) 16:47:55先にDBを定義しておいても使えるし、先にクラスを定義しておいても使える
どっちがメインかなんて意味なさ杉
0582デフォルトの名無しさん
2007/03/02(金) 17:09:31ER図でどうなるかとか、SQLで結合しやすいかなどは考えながらやってるよ。
そういう意味じゃO-R-Oマッピングくらいか。
HQLやEJQLを使えば何でもできるというのはなんか違う気がする。
こいつは必要悪とは言わないがある種の妥協なんだと思う。
0583デフォルトの名無しさん
2007/03/02(金) 23:07:58テーブルごとにsqlMapを分けてるんだけど、
呼び出し側でnamespace意識して呼び出すことってできないの?
0584デフォルトの名無しさん
2007/03/05(月) 01:24:380585デフォルトの名無しさん
2007/04/08(日) 01:06:340586デフォルトの名無しさん
2007/04/12(木) 19:09:54具体例を挙げると、ショップとカタログと商品のテーブルがあるとすると
カタログテーブルはショップIDと商品IDのユニークな組み合わせを持ってて、他にカラムは無い状態。
実際はあるオブジェクトに対してカスタム属性を付加するアプリなんだけどね。
0587デフォルトの名無しさん
2007/04/13(金) 01:36:02Chapter7.Association Mappings
http://www.hibernate.org/hib_docs/v3/reference/en/html/associations.html#assoc-bidirectional-join
試してなくて申し訳ないんだけど、ここに書いてある「join table」使ったマッピングじゃだめ?
0588デフォルトの名無しさん
2007/04/14(土) 00:43:390589デフォルトの名無しさん
2007/04/14(土) 02:15:570590デフォルトの名無しさん
2007/04/14(土) 19:00:53よくわかんないけど。
0591デフォルトの名無しさん
2007/04/14(土) 19:17:24それがなんだかわからんが
0592デフォルトの名無しさん
2007/04/14(土) 19:49:120593586
2007/04/17(火) 18:45:14カタログテーブルにあたるビーンを作ってしまったのが混乱の元のようで。
0594デフォルトの名無しさん
2007/05/10(木) 00:19:390595デフォルトの名無しさん
2007/06/23(土) 18:25:45定数だけを集めるクラスを作ったり、列ごとの列挙型のクラス作ったりするのが普通なのですか?
0596デフォルトの名無しさん
2007/06/23(土) 18:34:070597デフォルトの名無しさん
2007/06/23(土) 20:46:11・const値
・enum挙
・ステートパターン
選択肢ってこれくらい?
0598デフォルトの名無しさん
2007/06/23(土) 23:25:41基本的に、対応するカラムの型にあわせたconstを用意。
0599デフォルトの名無しさん
2007/06/23(土) 23:35:580600デフォルトの名無しさん
2007/06/24(日) 08:30:240601デフォルトの名無しさん
2007/06/24(日) 14:02:08揚げ足とりでスマンけど、直値って言うか?
immediateは即値じゃね?
0602デフォルトの名無しさん
2007/06/24(日) 23:53:07エンティティクラスとステートパターンがわからないので出直します。
0603デフォルトの名無しさん
2007/07/11(水) 10:15:300604デフォルトの名無しさん
2007/07/13(金) 10:49:140605デフォルトの名無しさん
2007/07/13(金) 12:15:09JDBC
0606デフォルトの名無しさん
2007/07/13(金) 14:25:25例えばgetTableInfo()みたいなものがあって、使用者側はどのベンダー化を意識しなくてもいいってこと?
0607デフォルトの名無しさん
2007/07/13(金) 14:36:270608デフォルトの名無しさん
2007/07/13(金) 14:52:45ありました
DatabaseMetaDataのgetColumns、getTables
0609デフォルトの名無しさん
2007/07/13(金) 23:33:470610デフォルトの名無しさん
2007/07/13(金) 23:34:400611デフォルトの名無しさん
2007/07/18(水) 18:48:270612デフォルトの名無しさん
2007/07/19(木) 00:52:22JavaCCとかAntlrとか
0613デフォルトの名無しさん
2007/07/23(月) 20:03:22例えばhibernateで、1対多の関係のあるテーブルをone-to-manyで関連付けた場合、
「1」側のデータを取得した際に「多」側の関連するデータのインスタンスを
すべて作成してしまうんですよね?1万件のデータであっても。
最初の10件・・のような、ページに分けて表示するようなWEBアプリの場合、
最初の10件分のインスタンスだけが取得できればいいと思っているのですが
多側のインスタンス数のコントロールとかできるのでしょうか?
もしくは、みなさんこんな場合にはどのようにしているのか教えていただけると嬉しいです。
よろしくお願いします。
0614デフォルトの名無しさん
2007/07/23(月) 21:00:10取得することも出来るし、しないこともできる
JPAでもそうだよ
基本はLAZYだろうね
0615デフォルトの名無しさん
2007/07/24(火) 12:49:13ありがとう。
> しないこともできる
っていうのはどういう風にやるのでしょうか?出来たら教えて欲しいです。
次の10件とか、どうやるんだろう?
LAZYにして、必要な分だけloopするとかですか?ん?違うかな。
それと、もう一つ教えてください。
hibernateで、例えばマスターデータの追加ではなく編集の画面で、
入力画面→確認画面→結果画面って流れで、
入力画面から取得した値をhibernateから取り出したエンティティの
プロパティ値に直接書いちゃうと、確認画面を表示するところで、
updateされちゃうじゃないですか。
普通は、このような流れの時には、hibernateから取り出しエンティティの
値をDTOなどにつめ直してセッションとかにぶち込んでおいて、
最後にDTOの値をエンティティに書き戻したりするんでしょうか?
うーん、伝わるかなぁ・・・。
よろしくお願いします。
0616デフォルトの名無しさん
2007/07/24(火) 13:51:11標準APIであるJPAの実装では1:nのデフォはLAZY
なにもアクセスしなければ連結先は取得されない
後半の文はおかしくないか?
実装次第だが仮にエンティティにデータを入れたところで勝手にupdateされるか?
WEBアプリなら入力専用にデタッチされたエンティティわたしてもいいし、
入力専用のBeanでわたしてもいい(これが普通)
スタンドアロンアプリなどではトランザクションでコミットしなければそのままだし
コネクションの持ち方と運用次第としか
ループ命令はfor文とwhile文のどちらがいいですか?といってる感じがしてどうもなぁ
0617デフォルトの名無しさん
2007/07/24(火) 14:37:38ありがとうございます。
> 標準APIであるJPAの実装では1:nのデフォはLAZY
> なにもアクセスしなければ連結先は取得されない
なにもアクセスしなければ、取得されないのは判るのですが、
ちょっとだけとか、ある範囲(20件目〜30件目など)だけ取得したいのに、
全件取得されちゃうんじゃないかと・・・?違うんですかね?
> 後半の文はおかしくないか?
すんません。
> 実装次第だが仮にエンティティにデータを入れたところで勝手にupdateされるか?
ええ。例えば先の例(WEB)で、
1.エンティティを取得→入力画面にエンティティの情報含めて表示。ユーザーが入力してOKする。
2.おんなじエンティティを再度取得して、入力データでそのエンティティのプロパティを変更してセッションとかに入れる
→確認画面に編集後のエンティティの情報を表示
3.OKが押されたなら、その編集後のエンティティを取り出して、update
って流れで考えていたのですが、2.の終了段階でflushされて、その時エンティティの状態が変更されているから、
updateしちゃうんですよ。てっきりupdate(entity)メソッドを発行しない限りupdateされないかと思ってたんですけど
・・・って、私が試したのはhibernate2だったんですけど。今は違うのかな?
すみません。
0618デフォルトの名無しさん
2007/07/24(火) 15:06:30使ってたんじゃないの?それだと update しなくても、セッションが
終了するときに、自動的に更新されるよ。
セッションって、webじゃなくてhibernateのほうのね。
0619デフォルトの名無しさん
2007/07/24(火) 16:11:49ありがとうございます。
そうですね、デタッチしてなかったです。
そもそも、設計自体がよろしくないんですね。きっと。
専用のBeanを使うのがやはり普通なのでしょうかね?
なんとなく、入出力用のBeanを使うと、beanとエンティティとの間でプロパティのコピーを
しなきゃいけなくって、そうするのもわずらわしいと思って、
直接エンティティを操作していたんですけど、←これがわるいんですね。きっと。
勉強になりますた。
どなたか>>617の前半の部分も解決させていただけると助かります。
よろしくお願いします。教えて君ですみません。
0620デフォルトの名無しさん
2007/07/24(火) 18:56:52例だけど、エンティティでは電話番号というデータ1つだけど、
UIでは-区切りの入力欄にするとかあるし・・・
0621デフォルトの名無しさん
2007/07/24(火) 22:26:58それならEAGERでいいっしょ
まぁLAZYでもその程度問題ないけど、全件取得して処理するのはおかしい
O/Rマッパというのはキャッシングも利用するからSQLが投げられるとも限らないからね
運用すればわかるがLAZYだから遅くなるとは限らない
0622デフォルトの名無しさん
2007/07/24(火) 22:27:52フレームワーク次第じゃない?
ハイフン区切りや複数のコンポーネントの結果が1つのフィールドになるようなら何にも問題ないし
0623デフォルトの名無しさん
2007/07/25(水) 08:28:56> ちょっとだけとか、ある範囲(20件目〜30件目など)だけ取得したいのに、
> 全件取得されちゃうんじゃないかと・・・?違うんですかね?
違うよ。LAZY LOADだとforループとかで21-30件目を
DTOなりにコピーするたびに
SELECT ... FROM ... WHERE ID=?
が発行されるだけ。なので計10回クエリーされるけど全件は取得されない。
SQLの効率をよくしたいなら、
JPQLなりHQLなりで必要な範囲だけ一回で取り出しておいて
コピーすればいい。
0624デフォルトの名無しさん
2007/07/25(水) 08:50:030625デフォルトの名無しさん
2007/07/25(水) 08:56:45Maker m = getSingleResult("select m from Maker m");
ってやって
List<Product> products = m.getProducts();
ってやったときにproductsが1万件あったらどうするの?ってことじゃないの?
0626デフォルトの名無しさん
2007/07/25(水) 23:37:080627デフォルトの名無しさん
2007/07/26(木) 00:10:29そんなあほな話じゃないだろ・・・
さすがにそう思いたい
0628デフォルトの名無しさん
2007/07/26(木) 01:37:40em.createQuery("select p from Products p where p.maker = :maker").
setParameter("maker", m).setFirstResult(20).setMaxResults(10).getResultList();
0629デフォルトの名無しさん
2007/07/26(木) 01:40:120630デフォルトの名無しさん
2007/07/27(金) 01:37:22OneToManyの意味ね〜
0631デフォルトの名無しさん
2007/07/27(金) 17:23:31まだこの世には存在しているという事実にナッカリ。
0632デフォルトの名無しさん
2007/07/27(金) 20:19:500633デフォルトの名無しさん
2007/07/27(金) 23:39:380634デフォルトの名無しさん
2007/07/27(金) 23:49:49たしかOracleって無理だったよね?
0635デフォルトの名無しさん
2007/07/27(金) 23:56:39危険性があるので、O/Rマッパー使いなさいってのは無理がある
0636デフォルトの名無しさん
2007/07/28(土) 08:33:07データベースにやらせてた処理をJava側にやらせるためにあるもんじゃない。
0637デフォルトの名無しさん
2007/07/28(土) 10:07:04O/RマッパとSQLは排他ってわけじゃないし
それぞれ利点と不利な点がある
0638デフォルトの名無しさん
2007/07/28(土) 10:54:56ついついカラム名を2〜3文字にして
エイリアスも極力短めに(ry
0639デフォルトの名無しさん
2007/07/28(土) 14:17:05select count(*) from Employee e
は使えないのでつか?
0640デフォルトの名無しさん
2007/07/28(土) 14:26:19とかじゃないかな
0641デフォルトの名無しさん
2007/07/28(土) 14:29:380642デフォルトの名無しさん
2007/07/28(土) 14:37:34でもおk
0643デフォルトの名無しさん
2007/07/28(土) 20:01:35そちらの方を使うことにしまつ
0644デフォルトの名無しさん
2007/08/07(火) 22:08:14ttp://journal.mycom.co.jp/news/2007/07/23/039/
既存バージョンからの主な変更点は以下の通り。
・組み込みオブジェクトのコレクションサポート
・組み込みオブジェクトの多段ネストをサポート
・Orderd Listのサポート
・アクセスタイプの組み合わせをサポート
・JPQL(Java Persistence Query Language)の拡張
・Criteriaの導入
・クエリとエンティティマネージャの設定ヒントの標準化
・DDL生成とJava2DBマッピングのための追加メタデータの標準化
・Bean Validation(JSR-303)のサポート
0645デフォルトの名無しさん
2007/08/07(火) 23:56:23・Orderd Listのサポート
・クエリとエンティティマネージャの設定ヒントの標準化
・Bean Validation(JSR-303)のサポート
あたりかな
気になるのはenumが使いたい場合ってのが結構あることかな
たぶんJPAで一番ほしいのはDBのデフォルト値を有効に出来るような仕様だろうな
開発、運用していて一番これが厳しかったりする
0646デフォルトの名無しさん
2007/08/08(水) 00:28:41Hibernateの仕様をベースにすんのかな?
あれはSQLと違って条件に応じて結合するテーブルを
動的に変化させるような使い方の場合に便利だと思う。
Hibernateではちょっと実装面がアレだったけど、
JPAだと安定しやすい仕様になってくれるんだろう。
0647デフォルトの名無しさん
2007/08/08(水) 00:42:05というか、ある程度のことをやろうとしようとするとどうせJPQLを組み立てることになって
Criteriaでまかなえないことも多そうだし
LAZYなどの厳密化がほしいかな
デフォだとめちゃくちゃ検索の連鎖する場合が多すぎる
ただ、鯖だとキャッシングしまくるからパフォーマンスの問題はでないんだけど
クライアントからのアクセスがおわっとる
せっかくSwingとの親和性がよくなりそうなのにC/S無視するのはどうかと
社内アプリならわりとC/Sもシェアあるぜ
まだまだ50%は超えているんじゃないかな
0648デフォルトの名無しさん
2007/08/12(日) 14:18:04>Criteriaでまかなえないことも多そうだし
具体的にはどういうケースですか?
0649デフォルトの名無しさん
2007/08/12(日) 15:49:310650デフォルトの名無しさん
2007/08/13(月) 10:57:080651デフォルトの名無しさん
2007/08/14(火) 09:57:59まちがえ、ddlutils
0652デフォルトの名無しさん
2007/08/15(水) 14:40:24激しく同意
0653デフォルトの名無しさん
2007/08/17(金) 01:57:00JPQLってINを上手く扱えるようになったのか・・・
0654デフォルトの名無しさん
2007/08/17(金) 05:22:41過去のJPQLがINを上手く扱えなかったような記述だな。
過去のJPQLって?w
0655デフォルトの名無しさん
2007/08/17(金) 21:32:580656デフォルトの名無しさん
2007/08/17(金) 22:12:540657デフォルトの名無しさん
2007/08/18(土) 00:34:59禿げしく同意
全くもって理解不能
0658デフォルトの名無しさん
2007/08/18(土) 00:52:110659デフォルトの名無しさん
2007/08/18(土) 01:40:330660デフォルトの名無しさん
2007/08/18(土) 03:23:450661デフォルトの名無しさん
2007/08/18(土) 13:25:340662デフォルトの名無しさん
2007/08/19(日) 12:25:58そういう話か?
0663デフォルトの名無しさん
2007/08/19(日) 14:56:37updateをするときは1回主キーで検索した結果のビーンを渡すが普通でしょうか?
1つのテーブルを更新する個所が複数あって、その都度、updateのバリエーションが増えてきてしまっています。
私はORMを今回はじめて使うのであまり口を出せないのですが、こういうものなのでしょうか?
0664デフォルトの名無しさん
2007/08/19(日) 15:54:47そういう話w
0665デフォルトの名無しさん
2007/08/19(日) 19:04:38普通のO/Rマッパは変更のあった箇所のみupdateを発行する
薄いラッパほどそのままなので把握がしやすいともいうが、チューニングしていくのは面倒かも
0666デフォルトの名無しさん
2007/09/01(土) 15:45:340667デフォルトの名無しさん
2007/09/25(火) 22:32:58参考サイトとかないですかね?
0668デフォルトの名無しさん
2007/09/26(水) 00:44:57http://www.hibernate.org/
0669デフォルトの名無しさん
2007/09/26(水) 00:48:43英語読めない
0670デフォルトの名無しさん
2007/09/26(水) 01:39:42http://www.nova.ne.jp/
0671デフォルトの名無しさん
2007/09/26(水) 01:45:43それは、読んでないだけ。
0672デフォルトの名無しさん
2007/09/27(木) 00:48:190673デフォルトの名無しさん
2007/09/28(金) 00:59:530674デフォルトの名無しさん
2007/09/28(金) 07:00:360675デフォルトの名無しさん
2007/10/06(土) 18:11:51Javaで言うとどんなのがあります?
やりたいのは、Railsでやってた、↓をJavaでもやりたい。
Four Days on Rails 4日で作るToDoリスト
http://rails.to/pages/4daysonrails
0676デフォルトの名無しさん
2007/10/06(土) 19:05:18JRuby on Rails
0677デフォルトの名無しさん
2007/10/07(日) 00:30:39厳密にはJavaじゃないけど、Grailsとか
ttp://grails.codehaus.org/Japanese+Home
0678デフォルトの名無しさん
2007/10/07(日) 00:48:54JSF+Rowsetならすべてポトペタであつかえるオールインワン環境だぞ
問題はRowsetが主流に慣れそうになくてJSF+JPAになりそうだけど
0679デフォルトの名無しさん
2007/10/07(日) 01:43:18Chura
0680デフォルトの名無しさん
2007/10/07(日) 02:05:280681デフォルトの名無しさん
2007/10/07(日) 02:32:450682デフォルトの名無しさん
2007/10/07(日) 06:00:35RIFE
0683デフォルトの名無しさん
2007/10/07(日) 08:50:59JRubyインストールしてみる
>>677
Groovyインストールしてみる
>>678
ポトペタって、マウスでぐりぐりやるとあらできあがり?
わからん
>>679
>churaの基本構成は、Seasar2.4 + Teeda + KuinaDao + S2Hibernate-JPA + S2Dxo + ツール群という形になります
インストール大変そうだから様子見てみる
>>682
RIFEインストールしてみる(他と比べると、ちょっと情報量が少ない?
0684デフォルトの名無しさん
2007/10/07(日) 11:52:24churaのインストールはこれだけだよ。
http://s2container.seasar.org/2.4/ja/setup.html
俺も最初は面倒くさそうだと思ったんだけど、eclipseプラグイン入れれば揃うみたい。
0685デフォルトの名無しさん
2007/10/07(日) 23:49:40ttp://d.hatena.ne.jp/RC3/20071007/1191760180
0686デフォルトの名無しさん
2007/10/08(月) 03:45:530687デフォルトの名無しさん
2007/10/08(月) 04:28:590688デフォルトの名無しさん
2007/10/08(月) 08:46:40こんなやつ一生無職のほうが業界のためだ
0689デフォルトの名無しさん
2007/10/08(月) 11:59:000690デフォルトの名無しさん
2007/10/08(月) 14:31:250691デフォルトの名無しさん
2007/10/08(月) 14:56:550692デフォルトの名無しさん
2007/10/08(月) 17:40:10標準になった以上、JPA以外の選択肢はありえない
0693デフォルトの名無しさん
2007/10/08(月) 19:32:17結論にはならんな。
0694デフォルトの名無しさん
2007/10/08(月) 20:35:11どうやってORmappingしているのですか?
0695デフォルトの名無しさん
2007/10/08(月) 20:41:11完全に一致させる必要ないだろ
0696デフォルトの名無しさん
2007/10/08(月) 20:48:05好きな名前つければいいと思うよ。
0697デフォルトの名無しさん
2007/10/08(月) 20:48:34プロパティとDBのフィールド名は一致させる必要はないぞ
0698デフォルトの名無しさん
2007/10/08(月) 21:35:58POJO内のメンバはDB上はこのフィールド、
のようなことはマッピングファイル?か何かに書いておけば
Dbアクセスの時は意識せずに使える、
ORマッピングのツールはどれもそんなモンなんですか?
逆に、それはできないぞ、というモノもあるのでしょうか。
0699デフォルトの名無しさん
2007/10/09(火) 01:09:02EJB3.0だとこんな感じになるはず。
# ただ、なるべく一致させておいた方が不幸なことが起きないかも・・・
@Entity(name="ITEM")
public class Item implements Serializable{
private int id = 0;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="RENBAN",nullable=false)
public int getId(){ return id;}
public void setId(int id){ this.id=id;}
private String title = null;
@Column(name="SHOSEKI_MEI",nullable=false)
public String getTitle(){ return title;}
public void setTitle(String title){ this.title=title;}
0700694
2007/10/09(火) 01:21:50作成されたBeanを見ると、
public static final String フィールド名_PROPERTY = "メンバ名";
という定数があって、これを使うようですね。
外部ファイルかアノテーションでやるのかと思ってましたが、
他のフレームワークでもこんなカンジなんでしょうか。
>>699
なるべく一致させたいのはやまやまですが、
ERを変えられるような立場ではないのです。orz
EJB3.0だとアノテーションで指定するのですね。
参考になります、ありがとうございますた。
0701デフォルトの名無しさん
2007/10/09(火) 13:04:01NetBeansだとテーブルから全部自動で作られるし
0702デフォルトの名無しさん
2007/10/09(火) 20:24:11NetBeans以外では自動で作ってくれるツールをしらない?
0703デフォルトの名無しさん
2007/10/09(火) 21:34:410704デフォルトの名無しさん
2007/10/10(水) 01:27:45知ってる
0705デフォルトの名無しさん
2007/10/10(水) 01:31:27きしだタソ乙
0706デフォルトの名無しさん
2007/10/12(金) 06:45:53WTP2.0
0707デフォルトの名無しさん
2007/10/12(金) 22:52:010708デフォルトの名無しさん
2007/10/12(金) 23:05:370709デフォルトの名無しさん
2007/10/13(土) 03:12:15ありえないほどバカだな
0710デフォルトの名無しさん
2007/10/13(土) 08:51:120711デフォルトの名無しさん
2007/10/13(土) 10:59:52その場合でも、手動マッピングはするわけだが
0712デフォルトの名無しさん
2007/10/13(土) 11:32:35M a p を そ の ま ま 使 う ん だ よ !
0713デフォルトの名無しさん
2007/10/13(土) 13:24:55キー値の取得がプロパティの取得につながるし
ただ、HashMapとかそのままつかうのだけは禁止
キー値が存在しない場合Exceptionをかえすような実装ならOK
0714デフォルトの名無しさん
2007/10/13(土) 17:00:59が、キー値なしで例外は納得した。
0715デフォルトの名無しさん
2007/10/15(月) 15:09:200716デフォルトの名無しさん
2007/10/16(火) 12:47:53DelphiだってBCBだってスクリプト系だって
0717デフォルトの名無しさん
2007/10/16(火) 14:05:520718デフォルトの名無しさん
2007/10/16(火) 14:19:27若い奴らは大変なんだよきっと
0719デフォルトの名無しさん
2007/10/16(火) 14:28:44名前で値を引っ張るものってことだろ。
何もおかしいことはない。
0720デフォルトの名無しさん
2007/10/16(火) 14:42:06知っているか?
0721デフォルトの名無しさん
2007/10/16(火) 14:42:10その流れを汲んでの話なんだよ。
自分で間違ったことを言っていないつもりなのだろうけど、
このずっと前からのスレの流れ的には空気読めてないんだよ。
しばらくROMってろ。
0722デフォルトの名無しさん
2007/10/16(火) 14:52:41JavaがLightWeightじゃないから
0723デフォルトの名無しさん
2007/10/16(火) 17:47:29それは知っているが、そんな昔の狂ったやつなんてもう今はいないだろう
Mapのように名前を使ってアクセスする場合何が問題だったのかだけがわかって使っていればおけ
VCLのようにラッパクラスをそのまま入れないこと、存在しないキーに対して
取得しようとしたときに例外を発生させることがきまっていれば問題はない
0724デフォルトの名無しさん
2007/10/16(火) 17:52:59おまえの頭がおかしいということはわかった。
0725デフォルトの名無しさん
2007/10/16(火) 18:07:58これが必要なのはなんで?
と思ったが、nullが戻ってきたんじゃデータが無いのか項目自体がないのかが判別できないのか
それ以外の理由もある?
0726デフォルトの名無しさん
2007/10/16(火) 18:48:260727デフォルトの名無しさん
2007/10/16(火) 21:53:400728デフォルトの名無しさん
2007/10/16(火) 22:33:48ただ、Oracleのような、空文字列がNULLであるようなDBMSではNULLを
避けようが無いだろう
0729デフォルトの名無しさん
2007/10/16(火) 22:41:000730デフォルトの名無しさん
2007/10/16(火) 22:42:28ただnullはアレで便利な面もあるので、ここらは宗教論だろう。
0731デフォルトの名無しさん
2007/10/17(水) 01:04:31どんな状況かわからん。
0732デフォルトの名無しさん
2007/10/17(水) 02:44:06だったら、RoRのActiveRecordのほうがよっぽど使いやすい。
0733デフォルトの名無しさん
2007/10/17(水) 09:26:04直感的じゃないと思うので、検索列には NULL は勘弁して欲しいところだ。
0734デフォルトの名無しさん
2007/10/17(水) 11:59:11nullがほしいならnullもor条件いれればいいじゃない
直感的ではないというのは同意だが、SQLにとってnullは特別な値だから仕方がないか
0735デフォルトの名無しさん
2007/10/17(水) 12:11:08NULLありのカラムはインデクス張る際にも実装上の制約があったりするし、
単純にホスト言語のデータ型とマッピングする際にもやや面倒が生じるので、
少なくとも意味のあるデフォルト値が考えられるようなエンティティなら、
NULLの代わりにデフォ値突っ込んだほうが楽は楽な気がする。
ま、常にそうできるというわけでもないが。
0736デフォルトの名無しさん
2007/10/17(水) 12:23:440737デフォルトの名無しさん
2007/10/17(水) 13:08:350738デフォルトの名無しさん
2007/10/17(水) 13:09:540739デフォルトの名無しさん
2007/10/17(水) 15:11:510740デフォルトの名無しさん
2007/10/18(木) 11:31:41条件を () で括って最後に is true
0741デフォルトの名無しさん
2007/10/21(日) 11:43:491:nのテーブルがあって、一覧を表示する詳細な検索画面などでどうしても結合が必要な場合や条件が複雑になる場合は
その画面専用?のメソッドを作成するものなのでしょうか。
0742デフォルトの名無しさん
2007/10/21(日) 16:28:160743デフォルトの名無しさん
2007/10/21(日) 17:46:11連結は製品次第
DBのようにテーブル状に結果が入るほうがいい場合もあるし
そのつど連結先を取ってくるほうがいい場合もあるしなんとも
0744デフォルトの名無しさん
2007/10/21(日) 18:06:18目的の方を「どうするのが普通でしょうか?」って
おかしくね?
0745デフォルトの名無しさん
2007/10/21(日) 18:34:43COBOLerお得意の横長DBとか。
まあ、漏れは直でSQLゴリゴリ出来る人なので、条件・結合が複雑だったら
SQLを直書きではあるな。
0746デフォルトの名無しさん
2007/10/21(日) 21:12:530747デフォルトの名無しさん
2007/10/21(日) 21:14:140748デフォルトの名無しさん
2007/10/21(日) 21:39:36って結局JSPで、DTOからコード値をgetして、
<% if (sex.equals("1") {%>男 ... (taglibとか)
みたいなのを書くってことでしょうか。
それともDTOにUser#getSexName、getSexCodeを自前で準備するものですか。
これだと自動生成が大変なのですが。。。
前にViewでマッピングしようとするとコネクションが切断?されてるから例外になったり、
マッピングを自動でするような機能がなかったりして断念したことがあるのですが。
0749デフォルトの名無しさん
2007/10/21(日) 23:47:14その例外はO/Rマッパ依存の部分でしょ
たとえばJPAのリファレンス実装であるToplinkは参照専用のコネクションを開くので問題ない
それにリソースファイルで扱う場合も多いし、すべてアプリやライブラリなど実装次第としかいえんぞ
0750デフォルトの名無しさん
2007/10/22(月) 16:02:030751デフォルトの名無しさん
2007/10/22(月) 19:55:03定数値と表示名称のマップをアプリケーションスコープに保存して
ELでアクセスしたりとか
DBに持たせてEntityの2次キャッシュにしたりとか
色々方法はあると思う
0752デフォルトの名無しさん
2007/10/22(月) 19:57:380753デフォルトの名無しさん
2007/10/22(月) 20:38:01これってどういうことなん?詳しくお願いしたいかもー。
0754デフォルトの名無しさん
2007/10/22(月) 21:59:39Hibernateなどの2次キャッシュ機能を使えば
アプリレベルでEntityを共有できる
これを通常のEntityと関連付けてLazyロードさせれば
Entityだけで名称表示を行える
まぁでも設定とか色々と面倒かも
0755デフォルトの名無しさん
2007/10/22(月) 22:36:37おー、なるほど、どうもです。
0756デフォルトの名無しさん
2007/10/23(火) 01:30:51やってないほうが少ないのでは?
おかげでLAZYが便利
ただ、hibernateではセッション明けとかないとダメかもね
0757デフォルトの名無しさん
2007/10/23(火) 21:41:49例えば、DB直接いじって定数テーブル?に1行追加して、htmlの画面で<option>がふえてねーじゃん!てことにならない?
0758デフォルトの名無しさん
2007/10/23(火) 22:10:440759デフォルトの名無しさん
2007/10/23(火) 22:37:320760デフォルトの名無しさん
2007/10/23(火) 22:43:49な件
0761デフォルトの名無しさん
2007/10/24(水) 01:52:07キャッシュ対象は読み取り専用のデータだけでしょ
プロパティファイルのDB格納版というか
0762デフォルトの名無しさん
2007/10/24(水) 01:58:30それと同じこと
0763デフォルトの名無しさん
2007/10/24(水) 01:59:36キャッシュ対象データはO/Rマッパーを使って更新する
0764デフォルトの名無しさん
2007/10/24(水) 13:48:23だからデフォルトのキャッシュ設定はoff。
キャッシュ側で短めの有効期限を設定したり、
動的な更新を想定しないテーブルのみに使ったりする。
クラスタの場合はDB直接編集でなくとも不整合が起こるので、
分散キャッシュ(OSSだとJBoss TreeCacheが有名)を使う事もある。
0765デフォルトの名無しさん
2007/10/24(水) 22:27:37管理者機能でマスタ更新とか作ったりするが、それじゃだめ?
DB直接いじってもボタン押したらキャッシュ読み直しみたいな。
大抵そんな機能を要求されるとマスタに好きなだけ追加削除更新したいって言い出すけどな。
性別なんて男性・女性・不明ぐらいでいいのに全部編集したい!とかいう客は珍しくない。
0766デフォルトの名無しさん
2007/10/25(木) 10:28:470767デフォルトの名無しさん
2007/10/25(木) 20:51:23「MTFTS」「MTFTV」「その他」「不明」とかぞろぞろあるんじゃね?
0768デフォルトの名無しさん
2007/10/25(木) 23:19:50最近はいろいろと考慮して、男・女の2択はまずやらないわけです。
そういう人からすると”不明”てのはあんまりよろしくないからね。
単純にデフォルトの表示を空白とか"-"にして必須選択にしないってのがうちの会社の流れです。
0769デフォルトの名無しさん
2007/11/08(木) 20:01:01以下のような ProductDao といったクラスを作り、
Product エンティティをリストで返すメソッドを作りました。
public List<Product> listProduct() throws Exception {
SqlMapClient sqlMap = MyIBatisUtil.getSqlMap();
return sqlMap.queryForList("Product.selectAll");
}
これで -Xlint:unchecked 付きでコンパイルすると、以下の警告が出ます。
警告:[unchecked] 無検査変換です
検出値 : java.util.List
期待値 : java.util.List<jp........Product>
return sqlMap.queryForList("Product.selectAll");
警告 1 個
<Product>はどこにつければいいのでしょうか?
return sqlMap.queryForList<Product>("Product.selectAll");
とやったら「シンボルを見つけられません」とでてしまました。
0770デフォルトの名無しさん
2007/11/08(木) 20:15:48原因はsqlMap.queryForListの戻り値が
型指定なしListになってるっぽいところじゃないかな。
キャストしても確か出たと思うので、
メソッド宣言の頭に@SuppressWarning("unchecked")をつけるとか。
0771デフォルトの名無しさん
2007/11/08(木) 20:31:40でも、JPAは5.0前提なのにキャストが必要で警告でるってのは納得いかないんだぜ・・・
0772デフォルトの名無しさん
2007/11/08(木) 21:00:45なるほど、com.ibatis.sqlmap.client.SqlMapExecutor#queryForList()が
Generics なしでビルドされているから(1.4デモ使えることを前提にしているから)
仕方がないということですね。
今作っているのは、自分の勉強もかねていて Genericsはあまり使ったことがないので、
生産性を度外視して極力 Generics を使っているのですが、
いろんなところでこの警告がでて直そうとすると疲れます。
>>769 で示したのは Dao の Impl クラスなのですが、
Dao のインターフェースクラスでは
public List<Product> listProduct() throws Exception;
というように、Dao を呼ぶ側に対しては Generics 付きで公開したいので、
>>770 のように @SuppressWarnings("unchecked") をつけて黙らせることにしました。
これで -source 1.5 -Xlint:unchecked をつけても、このメソッドでは警告が出ないようになりました。
勉強になりました。どうもありがとうございました。
0773デフォルトの名無しさん
2007/11/08(木) 21:27:11外部との連携が多いと利点を活かしきれないことも多いとは思う。
JDBC4.0があと2年もすれば普及すると思うけど、
>>769の手間をデータベース開発元がやってくれるから凄く楽になる。
SQLを外だしするってだけでも恩恵はでかいからiBatisは残るだろうけど。
0774デフォルトの名無しさん
2007/11/10(土) 00:44:24SqlMapClientをpublic static等で参照できるようにして
#setUserConnectionでjava.sql.Connectionをセット、queryXXXを実行するで問題ないでしょうか。
あと、いまいちSqlMapSessionの存在意義などがわからないのですが・・・
0775デフォルトの名無しさん
2007/11/11(日) 18:18:46DBの接続先をibatisのxmlに記述しているのですが、
参照するDBが複数になってしまった場合どんな感じでやるのがベストだと思いますか?
単純に設定ファイル追加か、追加されたDBのコネクションを取得してセットしてやるが候補なのですが、おかしいかな。
0776デフォルトの名無しさん
2007/11/11(日) 21:22:36なので設定ファイルを追加して、SqlMapConfig も複数にするしかないような気が。
ibatisのサイトのチュートリアルの7ページを改造してみた。
以前も同じような方式でやったが、ほかにいいアイデアがあればおれも教えてほしい。
public MyAppSqlConfig {
private static final SqlMapClient sqlMap_A ;
private static final SqlMapClient sqlMap_B ;
static {
try {
// A用
String resource = "com/ibatis/example/sqlMap-config_A.xml";
Reader reader = Resources.getResourceAsReader (resource);
sqlMap_A = SqlMapClientBuilder.buildSqlMapClient(reader);
// B用
resource = "com/ibatis/example/sqlMap-config_B.xml";
reader = Resources.getResourceAsReader (resource);
sqlMap_B = SqlMapClientBuilder.buildSqlMapClient(reader);
} catch (Exception e) {
throw new RuntimeException ("Error initializing MyAppSqlConfig class. Cause: " +e);
}
}
public static SqlMapClient getSqlMapInstance_A(){
return sqlMap_A;
}
public static SqlMapClient getSqlMapInstance_B(){
return sqlMap_B;
}
}
0777デフォルトの名無しさん
2007/11/11(日) 21:50:05thx。
やっぱそういう感じになるか。
>>774の#setUserConnection?をつかってもできそうな、できなさそうな
0778デフォルトの名無しさん
2007/12/14(金) 00:33:18関連があるテーブルだと勝手に多重度が設定されますよね。
one-to-manyとか。
あれを自動で設定されたくないんですが、
自動生成時にオプションとかでオフにできないものでしょうかm(_ _)m
0779デフォルトの名無しさん
2007/12/14(金) 01:50:450780デフォルトの名無しさん
2007/12/14(金) 09:23:050781デフォルトの名無しさん
2007/12/14(金) 21:34:570782デフォルトの名無しさん
2007/12/18(火) 08:58:11ありがとうm(__)m
0783デフォルトの名無しさん
2007/12/25(火) 14:20:30いま自分がヘルプでアサインされた案件が(Struts+)Spring+Hibernateなのですが、
DAOの作り方が以下のようになっています。
スーパークラス:Org.springframework.orm.hibernate3.support.HibernateDaoSupport
各業務のDAO:HibernateDaoSupportをextendsする。
OracleのXML DB SQL関数を使いたいという理由で、HQLもcriteriaでもなく 生SQL を使っている。
各業務DAOでは、以下のようなコードになっています。
例:
public List getHogeTableEntity() {
〜
Session session = super.getSession();
SQLQuery query = (SQLQuery) session.getNamedQuery("....");
ScrollableResults sr = query.scroll();
〜
}
質問1.:
このメソッドの中で、sessin.close()が呼ばれていなかったり、ScrollableResults.close()も
呼ばれていないのですが、これはNGですよね?
session には clear() というメソッドもありますが、close()とはどう違うのでしょうか?
質問2.:
上記のケースとは違いますが、似た質問です。
技術評論社のSpring入門なんかの本を見ると、以下のようなコード(例.p274)があります。
public List findPerson() {
return getHibernateTemplate().find("from person");
}
ここでは close() がよばれていませんが
(そもそも org.springframework.orm.hibernate3.HibernateTemplate には close() がない)
これはこれでいいのですよね?
0784デフォルトの名無しさん
2007/12/25(火) 15:24:48フレームワークなどがそれらを完全にコントロールしてユーザーは
コネクションを勝手に閉じたりしてはいけないタイプがある。
トランザクションがどの境界でコミットされるかなど、重要なことは多い。
わからないことがあったら普通に素直に聞いたほうがいいよ。
とくにあとからヘルプで入った場合はチーム内での暗黙のルールとかあると思うし。
0785デフォルトの名無しさん
2007/12/26(水) 00:39:23> session には clear() というメソッドもありますが、close()とはどう違うのでしょうか?
Hibernate は取得したオブジェクトを Session にキャッシュしている。
そのキャッシュのクリアが clear() で行える。
ただし、この関数を呼び出してしまうと、Session#save() で永続化しているが、まだDBにコミットして
いないアクションさえもクリアしてしまう。
close() はそのセッションの破棄を意味する。
0786デフォルトの名無しさん
2007/12/26(水) 00:45:09Spring の HibernateTemplate は基本的にすべての作業を HibernateCallback インターフェイス内で
行う。
この HibernateCallback には、Object doInHibernate(Session session) という関数が定義されており、
この関数に渡される Session は Spring が破棄してくれる。
さらに、Spring では HibernateCallback を実装しなくてもある程度は実行できるようにいくつかの簡単な
関数を HibernateTemplate で提供してくれている。
> return getHibernateTemplate().find("from person");
も、そのうちの一つ。これを、HibernateCallback を使用して実装すると以下のような感じになる。
return getHibernateTemplate().execute(new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException {
Query query = session.createQuery("from person");
return query.list();
}
});
Spring のソースを追えばすぐに分かると思う。
0787デフォルトの名無しさん
2007/12/26(水) 00:54:03することが出来る。
>>784 も言及しているが、この辺は各プロジェクトでどのような扱いにしているのかで話が変わってくるので、
聞いた方が早い。
ただ、HibernateDaoSupport を継承したとしても、HibernateCallback の中でない限りは Spring が Session を自動的に
閉じたりすることを期待できない気もする。
とはいえ、AOP を使用して閉じるようにしているのかもしれないので断言は出来ない。
だけど、ScrollableResults は自力で閉じないとムリなような気が・・・。
0788デフォルトの名無しさん
2007/12/26(水) 01:28:46てか、俺はそうした。
0789デフォルトの名無しさん
2007/12/26(水) 02:08:53オープンソースだけにソースに手が入ってる可能性も高いしね
断言は危険
0790デフォルトの名無しさん
2007/12/26(水) 17:42:16ORMapper は iBatis しか使ったことがなかったので Hibernate は初めてなのですが、とても参考になりました!
>>785 clear() の役割はわかりました。
たしかに Hibernate にはその特徴として 「永続化コンテキスト」というのがあるが、
そのキャッシュを破棄するということですね。
>>786-788 Spring の HibernateTemplate と組み合わせる場合は、Spring のなかで
Session が管理されているので、プログラマは意識しなくてよいというのも理解しました。
自分が理解した仕組み:
>>787 のように Spring AOP を使っていることが前提となるが、
1.context.xml で、transactionManager や、Transaction 管理させるAOPの設定をしておく
2.AOPで、たとえば update* というメソッドを AOP の範囲と設定しておく
3.update*() に処理が移ると、Session が確保される(Commons DBCP などを使っている場合、pool からひとつとってくる)
4.getHibernateTemplate().find() すると、内部で 3. で得たSession に対し DB アクセスが行われる
(ThreadLocal 経由で DAO に Session が渡されるのかな)
5.update*() が終わると、トランザクションが commit され、session も close() される。
Spring のソースをDLして見てみましたが、>>786 で示していただいたソースは、
HibernateTemplate#find(String, Object[]) と同じものですね。
0791783
2007/12/26(水) 17:43:24こちらの状況ですが、フレームワーク担当に聞いたり、OSSをラップしているローカルフレームワークの
ソースを読んだところ、以下の状況でした。
・トランザクションの管理は、context.xml の AOP で行っている。
・独自に Interceptor や Adviser のようなクラスをつくり、そこで管理はしていない。
・実際には HibernateDaoSupport と業務DAO の間にローカルフレームワークの抽象クラスがあるが、
ここでもトランザクション管理/Session 管理はしていない。
業務DAO が >>783 になっていることを告げると、フレームワーク担当もどうしたらいいかわからないということで
調べることになりました。
ということで、以下のように考えました。
・ScrollableResults は、Spring をうまく使っていようがいまいが、自分で close() する必要がある
・super.getSession() した場合、AOP の範囲の外を出たときに、session が自動的に close() されるかどうか
調べる必要があり
うーん、サンプル作って実験してみるか・・・
ちなみに AOP は以下のように設定しています。
0792783
2007/12/26(水) 17:50:18<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory"><ref bean="sessionFactory"/></property>
</bean>
<!-- Transaction proxy -->
<bean id="autoTransactionProxy" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<list>
<value>*Service</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>tsInterceptor</value>
</list>
</property>
</bean>
続く
0793783
2007/12/26(水) 17:50:47<!-- interceptor -->
<bean id="tsInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionManager"><ref bean="transactionManager"/></property>
<property name="transactionAttributeSource"><ref bean="tsAttribute"/></property>
</bean>
<!-- attribute -->
<bean id="tsAttribute" class="org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource">
<property name="properties">
<props>
<prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="insert*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
何度も連投すみません。以上です。
0794デフォルトの名無しさん
2007/12/27(木) 00:18:15お前がプロジェクトに対して発言権があるかどうかはわからないが、
おれは出来る限りHibernateDaoSupport を使うときには
HibernateCallback で実装を進めるようにしてもらったほうがいいと思ってるし、
方針が曖昧なようならそう提案してみてはどうだろう?
そうすることによって
・ Session の境界をコントロールしやすくなる。
(HibernateTemplateがネストしたときには下位のセッションが上流に合流する)
・session の close() 忘れが無くなる。
(これはテスト実行時にデッドロック的な挙動を引き起こしたりする)
という利点がある。
OpenSessionInViewパターンは一番シンプルなんだが、
View 層に処理が渡ってから DB にアクセスするしにいったりする挙動が
三層モデル大好きな奴らから理解を得られない場合があるしやめたほうがいい。
複数画面をまたいでオブジェクトを引き回すときには結局Hibernateのセッション切れるんで、
あんまり有利でないことも多いし。
0795デフォルトの名無しさん
2007/12/28(金) 00:38:31誤解のないように言っておくが、iBatisでもSpringと組み合わせれば似たようなことができるよ
0796デフォルトの名無しさん
2008/01/16(水) 01:23:47その場合にマッピングファイルに定義するIDジェネレータは SelectGenerator ですよね。
公式のチュートリアルにこんなんあったんですが、
------------
<id name="id" type="long" column="person_id">
<generator class="select">
<param name="key">socialSecurityNumber</param>
</generator>
</id>
※person_idがトリガで払出した代理キーで、socialSecurityNumberが自然キーらしいです
------------
僕が実現したいテーブルに自然キーはないので(ユニークになるカラムもPKだけ)、
以下のようにしたいのですが、keyが必須だとエラーがでました。
------------
<id name="id" type="long" column="person_id">
<generator class="select" />
</id>
------------
自然キーで指定するフィールドもないので、どうやって<id>タグ書けばいいのか分かりません。
どなたか教えてもらえないでしょうかm(_ _)m
0797デフォルトの名無しさん
2008/01/20(日) 09:43:590798デフォルトの名無しさん
2008/01/20(日) 13:04:53SELECT
売上実績.*
FROM
売上実績
INNER JOIN 顧客 ON
売上実績.顧客番号 = 顧客.顧客番号
INNER JOIN 商品 ON
売上実績.商品番号 = 商品.商品番号
WHERE
売上実績.年 = 2007 AND
売上実績.月 = 12 AND
顧客.名前 = 'ひろゆき' AND
商品.商品名 = 'うまい棒'
ORマッピングではないけど、独自実装のDAOで、
こういう感じのSQLを1回発行すればいいものを、数万回発行するものがあったので……
0799デフォルトの名無しさん
2008/01/20(日) 13:11:16SELECT
売上実績.*
FROM
売上実績
INNER JOIN 顧客 ON
売上実績.顧客番号 = 顧客.顧客番号
INNER JOIN 会社 ON
顧客.会社番号 = 会社.会社番号
INNER JOIN 商品 ON
売上実績.商品番号 = 商品.顧客番号
WHERE
売上実績.年 = 2007 AND
売上実績.月 = 12 AND
会社.社長 = 'ひろゆき'
商品.商品名 = 'うまい棒'
0800デフォルトの名無しさん
2008/01/20(日) 13:14:37売上実績.商品番号 = 商品.顧客番号 じゃなくて、
売上実績.商品番号 = 商品.商品番号
連投すまん。
0801デフォルトの名無しさん
2008/01/20(日) 15:25:07それができないマッパってたぶん存在しないぞ
0802デフォルトの名無しさん
2008/01/20(日) 21:40:23昔、誰かが作ったそんな独自ORマッパーがあって、使えんから
改造した経験がある。公開されてるので、さすがにないだろ。
0803デフォルトの名無しさん
2008/01/21(月) 09:24:190804デフォルトの名無しさん
2008/01/21(月) 15:31:37以下であってる?
○iBatisの場合、>799 のような SQL を直接書いて、得られた結果セットは <resultMap> タグに書いておいた
売上実績 エンティティにマッピングされる。(これはよくやってる)
Hibernate の場合、売上実績の hbm に、売上実績.顧客番号→顧客.顧客番号 とかの関連 を書いておけばよい。
ただし join フェッチにしないとだめ。
# あ、結果セットは売上実績TBL単体しか見てないので、この場合は joinフェッチとか select フェッチとか関係ないんだっけ?
0805デフォルトの名無しさん
2008/01/21(月) 15:51:17S2DaoはSQLファイル書けばできる。
S2JDBCはSQL書かなくてもできる。
0806デフォルトの名無しさん
2008/01/21(月) 20:11:07Hibernateも今後JPA実装をまずメインにしていくし
0807デフォルトの名無しさん
2008/01/21(月) 21:09:230808デフォルトの名無しさん
2008/01/21(月) 23:34:51仕様策定とプロダクトと一緒にするなよと
0809デフォルトの名無しさん
2008/01/21(月) 23:51:59Hibernate陣営が仕様策定に大きく関わっているってことだろ?
0810デフォルトの名無しさん
2008/01/30(水) 23:21:38UTF-8で作成したいのですが、どのような設定を行えばよいでしょうか?
>>62で書かれている事象と同じようなことになってしまいます...
0811デフォルトの名無しさん
2008/01/30(水) 23:30:020812デフォルトの名無しさん
2008/02/08(金) 20:54:051.2.x 以降は設定ファイルの書式が若干良くなったり
かえって悪くなったりしてるだけじゃなかろうか。
(XML 名前空間は使いにくいから失敗だと思う。
機械が読むには悪くないけど、人間が書くには疲れる。)
spring-ws や spring-webflow みたいなサブプロジェクトが
どれだけ完成度高めていくかと、
新たに面白いサブプロジェクト生まれないかなぁって辺りに関心がある。
コアのバージョンはもうどうでも良いって言うか。
Guice や Sesar2 はハナから問題外じゃね?
デファクト取っちまってるプロダクトがどうしたって強いし。
あとは Rails にだまされてる人達が
どれだけ早く DI の妥当さに気がつくかだけでしょ。
0813デフォルトの名無しさん
2008/02/08(金) 21:53:32XML->Beans->DBまで一発でリレーション作れたら凄い楽かも。
ついでJAXBの生成したBeanにバインドしたSwingフォームを作ってくれるとなおよし。
0814デフォルトの名無しさん
2008/02/09(土) 03:37:21マルチうざ
0815デフォルトの名無しさん
2008/02/09(土) 03:39:52NetBeansはさわったことあるかね?
JPA直はコンポーネントバインディングでできてるからJAXBも問題ないでしょ
でも、JAXB直はあまりないんじゃね?
JAX-WSで使うのが本筋でしょう
これもNetBeansだと全自動で鯖もクライアントも用意できるし
0816デフォルトの名無しさん
2008/02/09(土) 23:46:31(1)DTOや検索条件ホルダーにゲッターとセッター必須ですか?
この手のクラスなら単純にpublicフィールドでいいじゃんと
(2)SQLテンプレートを別ファイルにしないオプションはありますか?
別ファイルのSQLのIDの代わりに、
テンプレートの文字列+DTOのClassを引数にできたいしませんか?
ちなみに更新系はアクティブレコード方式のマイナーなの使っています。
DBはマーチン先生の言葉で言うところのアプリケーションデータベースで、
DBA、データ管理者を開発の主要メンバが兼任していて、
処理は大量の項目を持つテーブルのCRUD処理がメインで、
複雑なドメインモデルが必要なロジックはほとんどなく、
保守運用上開発者は当然テーブル構造を熟知していなきゃだめだめ、
な環境だと初めにテーブルありきで名前による自動マッピングで全てを解決する
シンプルなアクティブレコードがいいのかなぁって思ってます。
0817デフォルトの名無しさん
2008/02/10(日) 00:05:19更新系と同一のものを使えばキャッシングとか性能向上されるようになってるはずだよ
0818816
2008/02/10(日) 10:31:26実は複雑な検索には、そのActiveRecord方式のフレームワーク使ってないです。
基本的に テーブル(ビュー)--ドメイン
を設定ファイル無しでマッピングするので、もしフレームワーク使うなら、
複雑なJOINの過程の検索条件列を無理矢理最上位のSELECTに書き、
元の1レコードがN件分現れる非常に直感的でないビューを作成しないといけないのです。
そのため今はSQLを引数に、読取り専用汎用ドメインを作成するような
ユーティリティでお茶を濁している感じなのですが、Webのシステムでないとはいえ、
文字列連結でSQL組んでたりであまりよろしくないのです。
両者とも私が関わる前からあり、別に私が選択した方式ではないです。
ActiveRecordで更新系に関してシンプルになるのは割りと気に入っているので、
複雑な検索系だけはiBATISなんかで改善できないかぁと思って色々調べてます。
0819デフォルトの名無しさん
2008/02/10(日) 15:07:54どのO/Rマッパにしろたいていキャッシングするからそれを無効に設定できるやつを選んでね
そもそもその既存のフレームワークはキャッシングはしてないの?OFFにするとパフォーマンス下がるよね
検索系だけなら複雑なO/Rマッパは使わないでCommons DbUtilsがいいんじゃない?
JDBCのラッパなのでコネクション取得できればそれでいいわけで
昔からあるということは新しいJDKとかつかえないだろうからなおさらかな
0820816
2008/02/10(日) 17:53:20以前にソースを見たらスレッド・トランザクション単位で、
主キーをキーにHashTableにドメインのインスタンスを保持していましたが、
常にDBからSELECTし、同じ主キーのインスタンスが既にマップに存在するなら
当該インスタンス上の値を上書きして返すようになっています。
なのでキャッシュしていてもパフォーマンス向上が目的でなく、
同じ主キーのインスタンスは1つということの保証が目的と理解しています。
Commons DbUtilsのソースを落として見てみました。
今現在のやり方はマップリストを返すやつと大体同じです。
iBATISは名前パラメータと動的部分をタグで制御っての気になります。
名前によるバインドはOraclePreparedStatementで直接受けちゃえば
使えそうだけど、それは反則のような気がして・・・。
0821デフォルトの名無しさん
2008/02/10(日) 18:45:55SQLを書きたいのか、隠したいのか、JDK5が使えるのか等
いろいろ前提条件があるからなんとも
iBATISは設定ファイル書いたりするのがたるいよ
今のバージョンはどうなってるかわからないけど
O/RマッパとしてはiBATISとDBUtilisはカプセル化が薄いので習得は容易だと思う
でもこの程度ならその自前のやつとそうそうかわらないかと
JDK5が使えるならJPAとか使うのもいいかも
標準技術だけあって各種ツールサポートが一番充実しているのが強み
0822816
2008/02/11(月) 00:27:15求める機能としては名前パラメータのSQL文字列と、
検索条件のマップもしくは検索条件DTOを引数にして結果のマップのリストを取得。
戻りのDTOのClassも引数に追加してDTOの配列で結果を取得。
スカラークエリから各種スカラー値を取得できるショートカットもあれば便利。
バインド後に実際に実行されるSQL文字列のログ出力。
(パラメータの型を無視して''やエスケープなしで単純置換して文字列でも可)
ソートキー列と値の配列から指定キー以降でMAXN件取得なんかもあれば。
なければ自分で作れば済むような機能もありますが・・
今日調べたらSpringJDBCのNamedParameterJdbcTemplateが求めるものに近そうです。
ソース見たら名前パラメタの条件の値がコレクションなら複数の?,?に展開とか賢い。
素のPreparedStatementだとIN句簡単につかえないのに。
ネックは5.0じゃなきゃ駄目なのと、Springのjarに組み込まれてる点か。
0823デフォルトの名無しさん
2008/02/11(月) 02:15:27DTOのリストでデータが帰ってくるのでいいのならDBUtilsで十分かと
当たり前だけど、SQLを隠さずにしようと思うと制限は出るよ
足りない機能はそれをラップすればいいだけ
マップやDTOを検索条件にするのはたぶん流行ってないかと
0824816
2008/02/11(月) 10:59:15マップで条件指定って流行ってないんですか。
リストか可変長引数が主流ということでしょうか?
それだとWHERE句で指定する列やサブクエリの数自体が可変で、
かなり動的にテンプレートを組み立てないといけない場合に
?の追加と条件リストへの値の追加との同期が厄介かなと。
名前パラメタとマップで条件指定なら、SQLテンプレートだけを動的に組み立てて、
別途条件MAPには順番気にせず、値が条件指定無しでNULLだろうが全部入れておけば、
内部で実際に名前パラメタで使用して?に置き換わったものだけ、
その順番で条件マップから条件の配列に再構築してくれる。
っていう点で有利だなと思ったのですが。
0825デフォルトの名無しさん
2008/02/22(金) 15:30:30http://book.mycom.co.jp/book/978-4-8399-2594-9/978-4-8399-2594-9.shtml
0826デフォルトの名無しさん
2008/02/22(金) 23:41:03続いてSpringJPAサポートなところなんだよね。
Seasar2やHibernateに依存しまくる文章はないものと信じたい。
0827デフォルトの名無しさん
2008/02/23(土) 00:59:49SpringJPAサポートって何かメリットあったっけ?
何のありがたみもないJpaTemplateとJpaDaoSupportしか知らないんだが。
0828デフォルトの名無しさん
2008/02/23(土) 03:17:540829デフォルトの名無しさん
2008/02/23(土) 14:04:520830デフォルトの名無しさん
2008/03/26(水) 18:03:43@Entity で bean とテーブルマッピングは一箇所で定義するが、
@NamedQuery は使用せず、SQL は外出しにする良い方法はないでしょうか?
マッピングは annotation を使いたい、しかし SQL は外出しにしたい。
というのが希望です。
0831デフォルトの名無しさん
2008/03/26(水) 18:43:330832830
2008/03/26(水) 20:45:09あ、DAO に突っ込めばいいってことですよね?
そんで session で createQuery なり createSQLQuery を呼ぶと。
確かにそうですね。
実は下記の記事を読んで、
http://www.ibm.com/developerworks/java/library/j-genericdao.html
これの GenericDao を使いたいなと思ったんです。
ただ、それだと DAO が query用のメンバで汚くなるかな、と…
と思ったんですが、それはそれで query をまとめとくクラスを作るとか、Map を使えば無問題っぽいですね。
あ、なんか解決っぽいです。
ありがとうございます。
0833デフォルトの名無しさん
2008/03/31(月) 10:10:38JPAでやってるならorm.xmlに書けば出来る
0834デフォルトの名無しさん
2008/04/12(土) 02:25:360835デフォルトの名無しさん
2008/04/14(月) 17:02:07これの日本語訳を見つけた。
http://www.ibm.com/developerworks/jp/java/library/j-genericdao/
0836デフォルトの名無しさん
2008/04/17(木) 23:16:09beanに手書きmappingすることで工数削減以外の、
パフォーマンスなどで利点があるのでしょうか???
0837デフォルトの名無しさん
2008/04/17(木) 23:28:25テーブル間の関連を書いておくだけで簡単に関連をたどっていけるのはかなりラク
A4何ページにもなるようなSQLなんて見とれんよ
でもHibernate使うのであればそれなりの知識は必要。
迷ってるぐらいならやめとけ
0838デフォルトの名無しさん
2008/04/17(木) 23:37:46工数削減できれば十分じゃね?
つまり給料増えるわけだ
実際のところ複雑なSQL発行することももうほとんどないけどね
昔はSQL発行をぎりぎりまでチューニングしないとまともに実用速度が出なかったけどね
へたなSQL書くよりO/Rマッパのほうが効率がいい場合も多いし
0839デフォルトの名無しさん
2008/04/17(木) 23:50:40工数削減⇒売り上げ減⇒間接費の負担増⇒給料減
0840デフォルトの名無しさん
2008/04/17(木) 23:54:25個人的にはそのとおりなんですが、
要員調達の困難さ(OR技術者が少ない)が障害で、上司が導入を拒んでいるんですよ。
で、他に理由があればいいなと思いまして。
0841デフォルトの名無しさん
2008/04/18(金) 00:01:41みんながみんなORまっぱをしってるひつようはないですよ。
SQL技術者なら多いという判断でしょうか?
であればSQLサポートツールとしてiBATISかS2DaoかS2JDBCを導入させてください。
とか。
0842デフォルトの名無しさん
2008/04/18(金) 00:21:51道具に流されるのはよくないが、JPAとか標準的なO/Rマッパは調達は容易だと思うけど
教育のコストも普通は考慮して納期設定するからどの程度の人員かどうかだな、結局は
>>841
S2JDBCはいわば俺俺JPAだから個人的にはオススメしにくい
それくらいならJPA使ったほうがいい
JDBC直でもいいとは思うけど、フレームワークでDBアクセスの方法はある程度絞ったほうがいい
まずはcommonsとかからスタートしてステップアップしていったほうがいいかも
JPAの利点はJavaEEの標準技術なのでサポートするツールがたくさんあるところだな
実装はRIのToplinkかユーザー数の多いHibernateの2択になることがほとんどだと思う
ToplinkはJPA2.0でもRIとなる予定で今後に期待されるとか、TopLink自体はOracleのものだから
glassfishかOracleのAS使う予定があるのならそちらがいい
0843デフォルトの名無しさん
2008/04/18(金) 00:31:54複数のテーブルからなる情報を取り扱うシナリオで、次のような条件を含む場合。
更新を前提にするので読み取りにJOINは使えないか使いにくい。
必要に応じてアクセスパスをたどる方法でのデータ取得が望ましい。
楽観的排他。
こういうケースでORMはおすすめ。
逆に問い合わせ中心でJOINや射影が有効。大域処理。
シビアなロック制御が必要な処理といったケースではあまり必要じゃない。
単純に1テーブルを1データオブジェクトにマップするだけが目的だったら正直どうでもいい。
0844デフォルトの名無しさん
2008/04/18(金) 00:37:28JPAのまともな実装見たこと無いんだけどいいのあるか?
0845デフォルトの名無しさん
2008/04/18(金) 00:39:020846デフォルトの名無しさん
2008/04/18(金) 00:41:45TopLink Essentialsでいいんじゃねーの?
吐き出すSQLみてるとLAZYとか一番まともそうだよ
0847デフォルトの名無しさん
2008/04/18(金) 01:02:130848デフォルトの名無しさん
2008/04/18(金) 01:16:24SQLや実装固有の機能使うならHibernateの方がいい
0849デフォルトの名無しさん
2008/04/18(金) 01:20:230850デフォルトの名無しさん
2008/04/18(金) 09:37:00工数削減が売上減ってどんだけバカな見積もりだしてるのw
0851デフォルトの名無しさん
2008/04/18(金) 14:28:350852デフォルトの名無しさん
2008/04/18(金) 14:56:02なんという殿様商売
こちとら工数×単価でどっちも削られっぱなしなんだぜ?
0853デフォルトの名無しさん
2008/04/18(金) 19:00:480854デフォルトの名無しさん
2008/04/18(金) 23:39:09期間は今までどおりにしろよ
0855デフォルトの名無しさん
2008/04/18(金) 23:57:23オマエが受身すぎなだけだろ。
バカは甘やかしてもいい事無いぞ
0856デフォルトの名無しさん
2008/04/30(水) 00:00:00この前 NTTデータとNRIの人と話したが、
あいつら、エンドユーザには絶対に単価情報を出さないって言ってた。
「人月ビジネスすると儲からないので、絶対一括」。
そして >>852 のような下請けが削られる。これ最強。
もっとむかつくのは、うっかりデータの新人が教えてくれたんだが、
うちら下請けには、すぐ工数削るのに、エンドユーザへは一切金額下げてない。
ほんとむかつく。まぁデータやNRIでここを見ている人もいるだろうし、優秀な人もいるけど。
あと、データの公共はほんとクソだな。自分たちは何もできないのに、
役人の顔色伺いながら、こっちの計画書の揚げ足取りしかしない。
法人のほうが、まだまし。
0857デフォルトの名無しさん
2008/04/30(水) 00:11:53まぁ技術力は要らないという人種ですから・・・
0858デフォルトの名無しさん
2008/04/30(水) 01:32:15>>856
> うちら下請けには、すぐ工数削るのに、エンドユーザへは一切金額下げてない。
当たり前だろ。
0859デフォルトの名無しさん
2008/04/30(水) 01:53:51みかかデータ。
0860デフォルトの名無しさん
2008/04/30(水) 20:18:37というかいなくなるな、みかかは・・・
0861デフォルトの名無しさん
2008/04/30(水) 22:56:55下請けなんてやるからいけない。
うちは10人ほどしかいない会社だが、元請しかやらないよ。
0862デフォルトの名無しさん
2008/05/01(木) 00:11:400863デフォルトの名無しさん
2008/05/01(木) 00:29:29ちょw
10億前後ってことかよw
そりゃそうだろww
0864デフォルトの名無しさん
2008/05/01(木) 01:01:44だがしかし数百人月の案件は中堅に譲るべし
中規模以下の案件まで大手が受注して下請けに出すから
業界がおかしくなるんじゃ
0865デフォルトの名無しさん
2008/05/01(木) 02:15:04小さい会社がそんなの受けてどうすんの?
一人当たりの利益が同じならば大きい仕事でも小さい仕事でもかまわんだろ
0866デフォルトの名無しさん
2008/05/01(木) 02:47:000867デフォルトの名無しさん
2008/05/01(木) 13:33:46http://www.java-users.jp/contents/events/ccc2008spring/sessions.html
まぁ内容的にはちょっと無理があったが、そのうちPowerPointも上記サイトで公開されるとのこと。
(スレ違いすみません)
0868デフォルトの名無しさん
2008/05/01(木) 20:27:47というか、ひがタンの会社、ITゼネコンじゃないのか?www
0869デフォルトの名無しさん
2008/05/01(木) 21:01:03だから上司にはそういうタイトル名だとはいってないという記述があったはず
0870デフォルトの名無しさん
2008/05/03(土) 19:02:53ひがは上司とか、わからない奴をだますことしか考えてないな。
0871デフォルトの名無しさん
2008/05/15(木) 00:00:55冷ややかな戦争勃発w
ttp://d.hatena.ne.jp/masataka_k/20080513/1210661500#c
342 名前:デフォルトの名無しさん[sage] 投稿日:2008/05/14(水) 02:05:36
はぶ参入で抗争激化!さぁ、盛り上がってまいりました!
343 名前:デフォルトの名無しさん[sage] 投稿日:2008/05/14(水) 02:08:47
とりあえず、保存しといた。
http://s04.megalodon.jp/2008-0514-0207-34/d.hatena.ne.jp/masataka_k/20080513/1210661500
347 名前:デフォルトの名無しさん[sage] 投稿日:2008/05/14(水) 07:16:26
面白くなってきたな。Seasar界隈は人格的にちょっとあれな人が多いのが魅力w
348 名前:デフォルトの名無しさん[sage] 投稿日:2008/05/14(水) 07:40:37
でも、理事のBlogでやることじゃないよこういうことはメールベースでやるべきだと思う
野次馬的には面白いかもしれないけど企業から見たら不安になって採用を躊躇するところが出てきてもおかしくないからね
352 名前:デフォルトの名無しさん[sage] 投稿日:2008/05/14(水) 14:02:42
マーケ的にまずいのでseasar3はとりあえず表に出さないでくださいとかいうのはちょっとやばい
353 名前:デフォルトの名無しさん[sage] 投稿日:2008/05/14(水) 14:04:14
元理事は一旦収束していたのに、なにをしたかったのだろうか。そして日記非公開の理由とは・・・?asipの参戦はありうるのか!?
354 名前:デフォルトの名無しさん[sage] 投稿日:2008/05/14(水) 14:08:14
うわ、ほんとだ 閉鎖した
355 名前:デフォルトの名無しさん[sage] 投稿日:2008/05/14(水) 16:31:01
DB関連とか色々勉強させてもらったけど、このしみったれた感覚が所詮デブオタなんだなと思うわ。
0872デフォルトの名無しさん
2008/05/17(土) 10:30:28Seasar2の後継プロジェクトとしてSlimを申請します。
SlimはかつてはSeasar3(?)と呼ばれていたものです。
詳細は、Seasarカンファレンスで発表します。
# 開設プロジェクトに関する情報
プロジェクト名:Slim
一覧に記載する簡単な説明:
"Less Is More"をコンセプトに持つ、フルスタックフレームワーク。
所属するトップレベルプロジェクト名:Sandbox.java
リーダアカウント名: higa
希望サイトアドレス: slim.sandbox.seasar.org
Maven用groupId: org.seasar.slim
よろしくお願いします。
http://ml.seasar.org/archives/operation/2008-March/003758.html
0873デフォルトの名無しさん
2008/05/17(土) 11:23:37よそのスレでやれ。
0874デフォルトの名無しさん
2008/06/05(木) 20:23:21S2DaoかSpringJdbcSupportでいいや。
0875デフォルトの名無しさん
2008/06/10(火) 23:00:37JDBC直でいいや。
0876デフォルトの名無しさん
2008/06/11(水) 00:14:06それ余計面倒w
0877デフォルトの名無しさん
2008/06/17(火) 18:09:51JavaとRDBのやりとりにに悪戦苦闘しながら1ヶ月やっといろいろなプログラムできてきた。
みんなどうしてこんな面倒なことしてるんだろうとぐぐった。
今ORMを知った。
タバコ吸いながらたそがれた。
0878デフォルトの名無しさん
2008/06/17(火) 18:32:11皆そうやって大人になっていくもんさ…
0879デフォルトの名無しさん
2008/06/17(火) 19:03:22いきなりO/RからはじめるとどういうSQL発行してるとかチェックしなくなってしまう
そもそもJDBCの時点でかなり触りやすくなってるけどね
昔はDBベンダごとにライブラリや命令がばらばらだったんだから・・・
0880デフォルトの名無しさん
2008/06/26(木) 10:48:44[Javaデータアクセス実践講座] この本結構いいと思うけど どうよ
#まだ ちら見だけどw
0881デフォルトの名無しさん
2008/06/26(木) 23:30:170882877
2008/06/27(金) 18:45:01>そもそもJDBCの時点でかなり触りやすくなってるけどね
ですね、だからこそ勉強する気になりました。
>>877
とりあえずJPAのドキュメントとか見たらやろうとしている事は簡単に
できそうだからそっから始めてます。
作るのめちゃくちゃ楽ですわ。
0883デフォルトの名無しさん
2008/07/03(木) 06:34:34もし知ってる人がいたら教えてください
ActiveObjectsっていうORマッパなんですが
複合主キー使えるんでしょうか?
0884デフォルトの名無しさん
2008/07/06(日) 14:19:03One側を得るようなJPQLはどのように書けばよいのでしょうか。
例えば従業員の作業日誌の直近5日分を
全ての従業員分取得するといったケースです。
0885デフォルトの名無しさん
2008/07/06(日) 16:39:40実際にやってみてダメだったJPQLここにさらしてみ
しょうもないところでつまってるだけだから
0886884
2008/07/06(日) 19:02:31まだ接続すらできてなかったりします。すみません。
DerbyやH2とDBを切り替えても動かないです。。。
0887デフォルトの名無しさん
2008/07/06(日) 19:37:16ちょwww
0888884
2008/07/06(日) 21:35:25DialyエンティティがEMPLOYEE_IDとWROTE_DATEの複合キーを
使用しているのですが、どこを直せばよいのでしょうか。
@Entitiy @Table(name="EMPLOYEE")
public class Employee implements Serializable
@OneToMany(targetEntity=Diary.class, mappedBy="employeeId")
public List<Diary> getDiaries() {
@Entitiy @Table(name="DIALY")
public class Dialy implements Serializable
@EmbeddedId
public DiaryPK getPK() {
@ManyToOne(targetEntity = Employee.class)
@JoinColumn(name = "EMPLOYEE_ID",
referencedColumnName = "EMPLOYEE_ID")
public Employee getEmployee() {
@Embeddable
public class DialyPK implements Serializable
@Column(name = "EMPLOYEE_ID", nullable = false)
public int getEmployeeId() {
@Column(name = "WROTE_DATE", nullable = false)
@Temporal(TemporalType.DATE)
public Calendar getWroteDate() {
0889デフォルトの名無しさん
2008/07/06(日) 22:59:480890デフォルトの名無しさん
2008/07/06(日) 23:30:48Employeeに定義しているdiariesの@OneToManyアノテーションのmappedByが間違っている
mappedByに書くのはカラム名ではなく相手側@ManyToOneのプロパティ名になるので
employeeとなるのが正しい
マッピングがよくわからないなら、DDLに外部キー制約を付けてテーブルを作成してから
EclipseのEntity自動作成機能を使った方が早い
0891デフォルトの名無しさん
2008/07/07(月) 02:18:220892884
2008/07/07(月) 21:20:55実はホントのソースコード上では全部Diaryだったんだけど、
手打ちで書いたらボロボロでした。英語力って大切ですね。
>>890
mappedByを修正して、Diary.employeeをread onlyにしたらうまくいきました。
どうもありがとうございます。
>>891
弄ってみた感触だとJPQLと@EmbeddableなPKは相性が思いみたいですね。
代理キーに切り替えて、PKだったものはUniqueにしました。
で、やっとこさ本題です。以下のようにすれば目的の結果を得ることができるのですが、
JPQL一発でList<Employee>内のgetterとしてのdiariesに、絞り込み結果を詰めることはできますか。
List<Employee> list = em.createQuery(
"SELECT e FROM Employee e ORDER BY e.id").getResultList();
Query query = em.createQuery(
"SELECT d FROM Diary AS d "
+ "WHERE d.employeeId = :empId AND d.wroteDate BETWEEN :start AND :end "
+ "ORDER BY d.employeeId, d.wroteDate");
for (Employee e : list) {
query.setParameter("empId", e.getId());
query.setParameter("start", start, TemporalType.DATE);
query.setParameter("end", end, TemporalType.DATE);
List<Diary> diaries = query.getResultList();
}
0893デフォルトの名無しさん
2008/07/07(月) 22:22:46なんでわざわざidとりだしてるんだ?
Entityのコードさらしてみ
0894884
2008/07/07(月) 22:59:33> なんでわざわざidとりだしてるんだ?
SQL的に速くてもリストの詰め直しは避けたかったためです。
以下はEmployeeとDiaryのコードです。
@Entity
@Table(name = "DIARY", uniqueConstraints =
@UniqueConstraint(columnNames = {"EMPLOYEE_ID", "WROTE_DATE"}))
public class Diary implements Serializable {
private static final long serialVersionUID = 1L;
@GeneratedValue(strategy = GenerationType.TABLE, generator = "DIARY_SEQ")
@Id
@Column(name = "DIARY_ID", nullable = false)
private Long id;
@Column(name = "EMPLOYEE_ID", nullable = false)
private Integer employeeId;
@Column(name = "WROTE_DATE", nullable = false)
@Temporal(TemporalType.DATE)
private Date wroteDate;
@Column(name = "CONTENT")
@Lob
private String content;
@ManyToOne(targetEntity = Employee.class)
@JoinColumn(name = "EMPLOYEE_ID", referencedColumnName = "EMPLOYEE_ID",
insertable = false, updatable = false, nullable = false)
private Employee employee;
0895884
2008/07/07(月) 23:01:04@Table(name = "EMPLOYEE")
public class Employee implements Serializable {
private static final long serialVersionUID = 1L;
@Id
//@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "EMPLOYEE_ID", nullable = false)
private Integer id;
@Column(name = "NAME", nullable = false)
private String name;
@OneToMany(targetEntity = Diary.class, mappedBy = "employee")
private List<Diary> diaries;
前はgetterにアノテーションを書いてましたが、フィールド注釈に変えています。
0896デフォルトの名無しさん
2008/07/07(月) 23:14:36>SQL的に速くてもリストの詰め直しは避けたかったためです。
?
>? ? @Column(name = "EMPLOYEE_ID", nullable = false)
>? ? private Integer employeeId;
?> ? @ManyToOne(targetEntity = Employee.class)
?> ? @JoinColumn(name = "EMPLOYEE_ID", referencedColumnName = "EMPLOYEE_ID",
?> ? insertable = false, updatable = false, nullable = false)
?> ? private Employee employee;
なにこれ?
0897884
2008/07/07(月) 23:16:480898デフォルトの名無しさん
2008/07/07(月) 23:19:15空白になにをいれたのだ?
なにこれというのは2つの箇所のことだよ
なんで2つあるの?
0899884
2008/07/07(月) 23:25:30ORMに慣れてないので主キーとエンティティが
等価に見えずにそう書いていました。
0900デフォルトの名無しさん
2008/07/07(月) 23:27:260901デフォルトの名無しさん
2008/07/07(月) 23:29:49from Employee e inner join e.diaries d
where d.wroteDate between :start and :end
order by e, d.wroteDate
getResultListがList<Object[]>になるけどこんなんで取れるんじゃね?
DiaryはEmployeeの関連持ってるんだからemployeeIdはいらないな。
0902デフォルトの名無しさん
2008/07/08(火) 00:40:032つのエンティティをかえすならせめてnewキーワードつかったほうがいいし
なぜ2つ返す必要があるのかわからない
@ManyToOneしてるんでしょ?
0903884
2008/07/08(火) 00:53:13詰め直す場合と比べたら、もっさりしちゃいますね。
結果セットがどのような状態かを考えれば仕方ありません。
まぁORM自体はなかなか便利なので、今後も使いたいと思います。
ながながとおつきあいいただきありがとでした。
0904デフォルトの名無しさん
2008/07/08(火) 01:07:54この程度で一々クラス作ってまでnewするか?いやしない。
fetch joinだと全部持ってこられてしまって直近だけ取れないから
EmployeeとDiary並べた。課題(>884)を素直に解くとこうなるだろ。
文句あるならお前の解を示せよ。
0905デフォルトの名無しさん
2008/07/08(火) 01:09:53外部キーを関連Entityとは別に定義するやり方は特に珍しくは無い
フィールドアクセス時にLAZYロードが走るようなJPA実装の場合便利だし
>>902
DiaryをルートとしてEmployeeをFETCH JOINするのと結局は同じになるからね
Employeeを軸にページングしたいときは、>>892のようにMany側は個別に取る必要があるけど
0906デフォルトの名無しさん
2008/07/08(火) 01:13:27>>884の文章の前半と後半が一致しないから無理だろ
0907デフォルトの名無しさん
2008/07/08(火) 01:15:51複数のプロパティを単一のカラムにマッピングすると動作は実装依存にならないかい?
0908デフォルトの名無しさん
2008/07/08(火) 01:37:03たしかに、>>894のようにどっちかをread onlyにしないと駄目だね
0909デフォルトの名無しさん
2008/07/11(金) 17:46:05入門については何とかなりそうなので、ある程度リファレンスな内容が載っている物を希望。
「HIBERNATE イン アクション」か「Hibernate (開発者ノートシリーズ) 」にしようと思ったんだけど、両方とも2.xなんだよね。
0910デフォルトの名無しさん
2008/07/11(金) 22:53:180912デフォルトの名無しさん
2008/07/29(火) 18:42:59何で、Many-to-One×3(データを持ってるテーブルの他に「関係」テーブルの定義も書く)ぢゃダメなんだ?
inverse指定とか出来るから?
0913912
2008/07/29(火) 18:43:580914デフォルトの名無しさん
2008/07/29(火) 19:20:54必要な場面ってのが想像できない
0915デフォルトの名無しさん
2008/07/30(水) 18:27:23少なくともオープンソース系では英語が読めないと先進的なことできないでしょ。
Seaserみたいのはごく一部だし
だから>>911は英語を死ぬ気で読むべき
0916デフォルトの名無しさん
2008/07/30(水) 18:33:050917デフォルトの名無しさん
2008/07/30(水) 18:52:00# しかしhibernate3やJPA周辺はそれなりに先進的だと信じてるぞ
何にせよ和書が出るまで待ってちゃ完全に出遅れ組なのは間違いないでしょ
和書書けばもうかるから著者はそれでいいんだろうけど
多くの人は6年間も英語やってたんだしさ リーディングくらいさくっとやりなよ 英語で情報発信しろとは言わないから。
0918デフォルトの名無しさん
2008/07/30(水) 18:57:520919デフォルトの名無しさん
2008/07/30(水) 20:18:050920デフォルトの名無しさん
2008/07/30(水) 21:03:230921デフォルトの名無しさん
2008/07/30(水) 21:20:38でも、酷い日本語の原文を想像して意味を拾うはめになったり
(やばいと気がつくからこれはましだが)、
勝手に脳内補完されたり、真逆の訳を付けられたり
こんな俺でも原文を読むようになりました
0922デフォルトの名無しさん
2008/07/30(水) 23:14:190923デフォルトの名無しさん
2008/08/01(金) 01:44:50フィールドやアクセッサにそんなもん付けたら、もうPOJOじゃねーよみたいな。
POJOを継承してそっちに@Entity付ける仕様の方がいいんじゃないかな。
JPAはどうせエディタで補完しながら使うんだし。
0924デフォルトの名無しさん
2008/08/01(金) 02:20:50Entityはビジネスロジック書く場所ではないから今の状態が一番バランスは取れていると思う
DTOはインターフェースだけでは定義できないしね(各種イベント等の処理が必要になる場合もある)
むしろDIコンテナやそれに依存したフレームワークでやっちまったといえるのが
アノテーションを使わないで自動バインディングして不具合出すようなやつ
自動バインディングしないようにアノテーションつけるって・・・本末転倒すぐる
0925デフォルトの名無しさん
2008/08/02(土) 17:55:410926デフォルトの名無しさん
2008/08/02(土) 22:38:220927デフォルトの名無しさん
2008/08/02(土) 22:43:500928デフォルトの名無しさん
2008/08/03(日) 02:34:12アノテーション関係ないし。
むしろ、継承して一クラス増やしちゃってるみたいだし。
0929デフォルトの名無しさん
2008/08/03(日) 03:07:04いやいやいや、アノテーション付けたらPOJOじゃないってのが発端だろ。>923嫁。
>925も>923宛じゃねーの?>924にはPOJOなんて出てこないんだから。
0931デフォルトの名無しさん
2008/08/03(日) 04:55:56だーかーらー、アノテーション付けたらPOJOじゃないって話が
なんで無駄なロジックの話になってんだよwわけわかんねーぞおい。
0932928
2008/08/03(日) 05:52:010933デフォルトの名無しさん
2008/08/03(日) 06:11:11作る側なら>>923みたいな狂った考えでてこないし。
>>924みたいにEntityObjectへの自動バインディングをパッケージ以外で設定するとか・・・
設計が糞かコンテナ理解低すぎる。
0934デフォルトの名無しさん
2008/08/03(日) 13:06:09>>924の後半はO/Rマッパの話ではなくて
某国産DIコンテナのフレームワーク周りの不具合のことな
0935デフォルトの名無しさん
2008/08/04(月) 23:01:14あんまり日本語の資料見かけないんだけど。
0936デフォルトの名無しさん
2008/08/05(火) 02:39:190937デフォルトの名無しさん
2008/08/06(水) 23:47:230938デフォルトの名無しさん
2008/08/07(木) 00:27:250939デフォルトの名無しさん
2008/08/07(木) 00:32:20s2jdbc.diconはXMLファイルな件
0940デフォルトの名無しさん
2008/08/07(木) 00:37:100941デフォルトの名無しさん
2008/08/07(木) 01:03:35「必要も感じられない」とかいって無視したらそれはバグだ。
0942デフォルトの名無しさん
2008/08/07(木) 03:50:50困ったクライアントにあたっちゃったね。
0943デフォルトの名無しさん
2008/08/07(木) 07:29:29JDBC
0944デフォルトの名無しさん
2008/08/07(木) 09:47:57まさにddlutils
0945デフォルトの名無しさん
2008/08/07(木) 21:43:220946デフォルトの名無しさん
2008/08/08(金) 23:14:070947デフォルトの名無しさん
2008/08/12(火) 22:26:260948デフォルトの名無しさん
2008/08/12(火) 23:28:00なにができるの?
0949デフォルトの名無しさん
2008/08/13(水) 22:46:480950デフォルトの名無しさん
2008/08/14(木) 09:56:560951デフォルトの名無しさん
2008/08/14(木) 18:13:27インターフェースだけ書けばいいみたいだな。
結構楽かも。
0952デフォルトの名無しさん
2008/08/15(金) 02:59:580953デフォルトの名無しさん
2008/08/15(金) 19:42:41どうやるの?
0954デフォルトの名無しさん
2008/08/19(火) 01:20:21ジェネリクスとなんの関係もない話っぽいが。
プロパティチェンジサポート全自動でやってくれるやつがいいなぁ。
JPAはそこだけ不満だから。
0955デフォルトの名無しさん
2008/08/19(火) 11:50:47DI コンテナみたいに実行時に Proxy クラスを自動生成して、
そいつが DB アクセスしてくれるってことかな。
0956デフォルトの名無しさん
2008/08/19(火) 16:04:37そうみたい。
middlegenみたいのが使えればもっと楽なんだけどなー。
0957デフォルトの名無しさん
2008/08/20(水) 02:15:24ジェネリクスが無い時代はDaoをそれぞれ作る必要があった。
それを軽減するための苦肉の策として、インタフェースを書けば
実行時に実装が生成される、というものが無理矢理作り出された。
ジェネリクスが出てからは、そんな無駄なことはしなくていいということ。
出た当初はもう、Daoは一個でいけるんじゃないかという流れも
あったが、そうではないことが世間的に分かってきた。
ジェネリクスの親Daoが一個あって継承だな。
0958デフォルトの名無しさん
2008/08/20(水) 02:25:16君の語るジェネリクスの例というか近いWebサイトなどがあったら紹介して欲しい。
0959デフォルトの名無しさん
2008/08/20(水) 10:16:230960デフォルトの名無しさん
2008/08/20(水) 10:36:53http://www.ibm.com/developerworks/jp/java/library/j-genericdao/
0961デフォルトの名無しさん
2008/08/20(水) 10:38:010962デフォルトの名無しさん
2008/08/20(水) 12:06:160963デフォルトの名無しさん
2008/08/20(水) 13:43:43generics勘違いしてそう
0964デフォルトの名無しさん
2008/08/20(水) 19:56:50その類。結果的にORMは結構それ系になってると思ったが違うのか?
>>961
そりゃそうだ。インタフェースだけ書くやつも単純なCRUDだけだろ。
別SQLファイルとか人の実装が必要なのは、もう実装そのものだし、
そもそもインターフェース「だけ」じゃないしな。
>963
そうか。勘違いかもしれん。
っつか、おまえは全部ObjectかMap厨かw
ORMでそもそも、それぞれインターフェースが必要だった理由の
1つに戻り値の型安全確保があったからと思ったが。
そうじゃなきゃRubyのActiveRecordみたいなのでいいしな。
JPAでもS2JDBCでもジェネリクスのおかげで便利に使えるように
なった。俺的にORMにジェネリクス抜きはもうめんどくさい。
0965デフォルトの名無しさん
2008/08/20(水) 21:59:46S2JDBCのS2AbstractServiceをありがたがるやつか
0966デフォルトの名無しさん
2008/08/20(水) 22:14:07>957の時点でわかれよ
0967デフォルトの名無しさん
2008/08/20(水) 22:40:17別に何か出たのかなと思ったまでだ
0968デフォルトの名無しさん
2008/08/20(水) 22:58:34自分の妄想いっぱいの持論を展開してるところか。
0969デフォルトの名無しさん
2008/08/21(木) 22:09:520970デフォルトの名無しさん
2008/08/25(月) 12:00:22Hibernateのコンフィグファイル等をすべて実行可能なjarファイルにまとめて
実行しましたとことろ、org.hibernate.MappingNotFoundException例外が発生してしまいます。
jarファイルの中にはいちおう必要なファイルはあるようなのですが。
当方、Java開発は統合環境(Eclipse)オンリーでやっていていて、jarファイルも、
Eclipseがすいすい出力してくれたのですが。
0971970
2008/08/25(月) 13:05:19よく考えたらcfg.xmlは読み込んでいるのに、cfg.xmlで指定された
マッピングファイルが読めないとかいっていいるのか・・・
0972デフォルトの名無しさん
2008/08/30(土) 05:04:59どのフレームワークが一番いいですか?
0973デフォルトの名無しさん
2008/08/30(土) 08:57:00Class::DBI
0974デフォルトの名無しさん
2008/08/30(土) 09:13:05LINQ to SQL
0975デフォルトの名無しさん
2008/08/31(日) 00:55:010976デフォルトの名無しさん
2008/08/31(日) 02:43:390977デフォルトの名無しさん
2008/09/03(水) 12:29:57データベースファイルの生成から面倒見てくれるフレームワーク無いかな?
今はiBATISでXML組み立てて作ってるけど、
ResourceBundleからCREATE TABLE生成とかしてるから
関連性がうまく保てないんだよな。
0978デフォルトの名無しさん
2008/09/03(水) 13:24:23テーブルからクラスを作るか
しかしないんじゃないかな
もちろん関連はすべてやってくれる
iBATISはDBよりなんでたぶん面倒なんだろうなぁというのはわかるが
0979デフォルトの名無しさん
2008/09/03(水) 16:23:070980デフォルトの名無しさん
2008/09/03(水) 17:18:440981デフォルトの名無しさん
2008/09/03(水) 17:24:030982デフォルトの名無しさん
2008/09/03(水) 20:09:55これに該当してるから特に何も新しい情報は出ていない。
0983デフォルトの名無しさん
2008/09/03(水) 20:13:14DBをSQLiteでやってることもあって、
軽い感じのがよくてiBATISをファーストチョイスにしたんだ。
JPAってSE1.5で使える?
0984デフォルトの名無しさん
2008/09/03(水) 20:33:19つまりSEも5.0が対象
もちろん上位互換のSE6でも問題は無い
0985デフォルトの名無しさん
2008/09/03(水) 22:34:50Java専属の技術者が会社にひとりだけだと、外様お断りなフレームワークは選択できない。
iBatisという有効な代替手段があるのもまたJavaのいいところだけど。
0986デフォルトの名無しさん
2008/09/03(水) 23:14:42Hibernateはちょっと強力すぎる気がするからOpenJPAがいいかな。
色々とありがとう。
0987デフォルトの名無しさん
2008/09/03(水) 23:29:10JPA汎用にしとけ。
依存コードは出来るだけ書かないこと、依存コードを明記しておくことでいいと思う。
>>985
JPAはiBatisと比べて利点は開発効率がいいことと、開発環境が整備されていること。
また、実装を切り替えることも出来る。
ただ、ちょっとレイヤーが違うから、SQLがりがり書きたい人ばかりならiBatisのほうがいいと思う。
DAOでラップしてO/Rマッパすらある程度隠すのもありかと。
0988デフォルトの名無しさん
2008/09/04(木) 00:59:000989デフォルトの名無しさん
2008/09/04(木) 01:02:58JPAやJDBC直書きと比べて学習対効果のバランスがいいしね。
0990デフォルトの名無しさん
2008/09/04(木) 01:12:15汎用ってのは、適当な実装から
JPAの部分、javax.persistenceのクラスだけ抜き出して使うって意味?
0991デフォルトの名無しさん
2008/09/04(木) 01:23:13JPAで実装依存ってそこそこ程度の案件だと、
悲観ロックを使う時くらいしかお目にかからない。
0992デフォルトの名無しさん
2008/09/04(木) 06:35:20Criteriaは使わないの?
あれが無いと任意検索条件のQueryを発行するのが面倒なんだけど
0993デフォルトの名無しさん
2008/09/04(木) 08:30:27みんな実際そんなに使ってないのか?
0994デフォルトの名無しさん
2008/09/04(木) 19:47:17依存ばりばりのSQLを直書きしたくなるからJPAはいらんなぁ。
レス数が950を超えています。1000を超えると書き込みができなくなります。