3

JPA 実装として Hibernate をよく使用しました。ほとんどの場合、問題なく動作します。しかし、私は多くの落とし穴も見てきました。

  • Hibernate は Java コレクションを独自のコレクション実装に置き換えるため、永続化されたオブジェクトを使用したリモート処理は困難です。したがって、すべてのクライアントには Hibernate .jar ライブラリが必要です。LazyLoading 例外などに注意する必要があります。この問題を回避する 1 つの方法は、Web サービスを使用することです。
  • ダーティ チェックは、ロックなしでデータベースに対して実行されます。
  • 「遅延 SQL」は、データ アクセスが ACID に準拠していない原因となります。(失われたデータ...)
  • 暗黙の更新 >> したがって、オブジェクトが変更されているかどうかはわかりません (コミットによって更新が発生します)。

Toplink、Eclipse Link、および Ibatis に同様の問題はありますか? いつ使用する必要がありますか? 彼らは同様のパフォーマンスを持っていますか?Hibernate よりも Eclipse Link/Toplink を選択する理由はありますか?

4

4 に答える 4

1

Ebean ORM http://www.avaje.orgとあなたの落とし穴に関して:

リモーティング

クエリで「バニラ」モードを使用すると、EbeanはプレーンなBeanとコレクションを返します。これは、「動的プロキシ/動的サブクラス」を使用する場合にのみ機能しますが、拡張を使用する場合は機能しません(エンティティBeanクラスは明らかに拡張されているため)。

ダーティチェックは、ロックなしでデータベースに対して実行されます

楽観的並行性チェックという意味だと思いますか?その場合、定義上、明示的なDBロックなしで実行されます。DBロックが必要な場合(更新用に選択するなど)は、代わりにペシミスティックロックを使用する必要があります。そのため、ここではあなたの主張に従わないでください。

遅延SQL

Ebeanにはセッションがないため、セッションflush()はありません。JDBCバッチ処理を使用する場合でもEbeanを使用してSQLを遅延させることができますが、セッションflush()を使用した場合と同じ遅延ではありません。

暗黙の更新

元Hibernateおよび元JPAの人々からよく聞かれる苦情。Ebeanはsession/entityManagerなしで設計されています。代わりに、Beanを明示的にsave()するか、関連するBeanにカスケードする必要があります。そうです、Ebeanによる暗黙の更新はありません。

于 2010-05-06T01:04:23.817 に答える
1

他の実装についてコメントすることはできませんが、DataNucleus AccessPlatform については ...

  1. モデルクラスはバイトコードで強化されているため、リモーティングには「jdo.jar」が必要になる場合があります。または、リモート側で「読み取り専用」を使用する場合は、そこで拡張されていないクラスを使用すると、追加の jar なしですべてが機能します。
  2. ダーティ チェックはバイトコード拡張によって行われるため、フィールドがダーティかどうかを確認するためにデータストアに移動する必要はありません (データストアに移動するときにロックを制御できます)。明らかに、これにより、リフレクション ベースの実装よりもパフォーマンスが大幅に向上します。
  3. 「失われた更新」はあり得ないことを知っています。楽観的ロックの使用が役立ちます。
  4. 「管理された関係」により、暗黙的な更新を取得できます (双方向の関係があり、一方の側のみを変更するため、DataNucleus は一貫性を保つために他方の側を更新します... flush() で)。「管理された関係」をオフにすることができます (ある程度まで)。オブジェクトのバージョン管理を簡単に有効にして、オブジェクトが変更されているかどうかを知ることができます。

DataNucleus を選択する理由は、こちらに記載されています

HTH

--アンディ・データニュークリアス

于 2009-04-06T13:22:05.457 に答える