2008-09-12 5 views
2

ORMツールを導入すると、より洗練されたアーキテクチャーになるはずですが、効率を上げるために、それを迂回して時折JDBC結果セットを繰り返していることがわかりました。これは、よりクリーンなアーキテクチャの代わりに、調整されていないアーティファクトの混乱を招く。いつORMアプローチで豚全体に行くことができますか?

これは無効なコンテキストでツールを適用しているか、それより深いですか?

いつORMアプローチで豚全体に行くことができますか?

洞察力があれば幸いです。


背景を少し:私の環境では

私は約50クライアントコンピュータと1合理的に強力なSQL Serverを持っています。

50人のクライアントすべてが常にデータにアクセスしているデスクトップアプリケーションがあります。など

プロジェクトのデータモデルは、明快など、さまざまな理由のために再編成の数を経験してきた

、効率、

私のデータモデルの歴史

  1. JDBCは関係なしに、直接
  2. DAO + POJOを呼び出しますPojosの間(基本的にJDBCをラップします)。
  3. 遅延ロードを実装するが、ちょうど間DAOは
  4. はそれが(それは些細な間POJO関係を作った)データ・アクセスを作った方法「シンプル」見た後、Hibernateの時流にジャンプし呼び出す隠し、それが減少する可能性があるためのPOJOの間に追加の関係多くの関連エンティティで作業する場合のデータベースへのラウンドトリップ回数。
  5. それが問題
  6. の全体の多くが戻って私が直接JDBCは、DAOの後ろに呼び出しを行うことを可能にする部分DAO /休止状態アプローチの段付原因となってしまったので、長期的には悪夢だったオープンセッションを維持するデスクトップアプリケーションだったので、同時にHibernateを使用しながらカーテンを作成します。

答えて

4

アプリケーションがオブジェクトグラフで動作するとき、HibernateはRDBMSで永続化されます。代わりに、アプリケーションロジックが2次元のデータ行列で動作する場合、直接JDBCを介してそれらをフェッチする方がより効果的です。 HibernateはJDBCの上に書かれていますが、JDBCに実装するのは簡単ではない可能性があります。たとえば、

  1. ユーザーがUIの行を表示して一部の値を変更し、実際に変更された列のみの更新クエリを起動するとします。
  2. デッドロックにならないようにするには、トランザクション内のSQLのグローバル順序を維持する必要があります。この権利を得るには、JDBCは簡単ではないかもしれません。
  3. 楽観的なロックを簡単に設定します。 JDBCを使用する場合、すべての更新クエリでこれを覚えておく必要があります。
  4. JDBCでは、バッチ更新、コレクションの遅延マテリアライゼーションなども重要ではありません。

もちろん、それは行うことができますので、(私は、「非些細なことかもしれません」と言う - あなたは、スーパーハッカーであるかもしれない:)

Hibernateはまた、独自のSQLクエリを発射することができます、あなたが必要な場合に備えて。

これはあなたが決定するのに役立ちます。

PS:リモートデスクトップクライアントにセッションを開いたままで問題が発生しても、実際にはHibernateの問題ではありません.DBとの接続を長く開いたままにしておくと、同じ問題が発生します。

関連する問題