ORMは裏でどのように機能しますか?また、Javaで永続オブジェクトを使用する最良の方法は何ですか?

StackOverflow https://stackoverflow.com/questions/1231295

  •  22-07-2019
  •  | 
  •  

質問

ORMはどのように機能しますか?オブジェクトはBLOBにシリアル化されますか?

Javaでは、JDOがまだこれを行う方法ですか?他に何がありますか? EJB、直接オブジェクトシリアル化、JDOについて多くの話があったようです。

役に立ちましたか?

解決

最初の質問に答えるために、 Hibernate in Action 、これはORMを実装するさまざまな方法があることを示しています。

  

純粋なリレーショナル

     

を含むアプリケーション全体   ユーザーインターフェースは、   リレーショナルモデルとSQLベース   リレーショナル操作。このアプローチ、   大規模の欠陥にもかかわらず   システム、優れたソリューションになります   単純なアプリケーションの場合、低   コードの再利用レベルは許容範囲です。   ダイレクトSQLは、すべてで微調整できます。   側面、しかし、などの欠点   移植性の欠如と   保守性は重要であり、   特に長期的には。   多くの場合、このカテゴリのアプリケーション   ストアドプロシージャを多用する   いくつかの作業を   ビジネス層とデータベースへ。

     

ライトオブジェクトマッピング

     

エンティティはクラスとして表されます   に手動でマッピングされる   リレーショナルテーブル。ハンドコーディングされたSQL / JDBC   ビジネスロジックから隠されている   よく知られているデザインパターンを使用します。   このアプローチは非常に普及しています   そして、アプリケーションのために成功しています   少数のエンティティ、または   汎用のアプリケーション、   メタデータ駆動型のデータモデル。保存済み   手順はこの中にあるかもしれません   アプリケーションの種類。

     

メディアオブジェクトマッピング

     

アプリケーションは、   オブジェクトモデル。 SQLはで生成されます   コード生成を使用してビルド時間   ツール、またはフレームワークコードによる実行時。   オブジェクト間の関連付けは   永続性によりサポート   メカニズム、およびクエリは   オブジェクト指向を使用して指定   表現言語。オブジェクトは   永続層によってキャッシュされます。 A   非常に多くのORM製品と自家製   永続層は少なくともサポートします   このレベルの機能。まあいいんじゃない   中規模のアプリケーションに適しています   いくつかの複雑なトランザクションでは、   特に、   異なるデータベース製品は   重要。これらのアプリケーションは通常   ストアドプロシージャを使用しないでください。

     

フルオブジェクトマッピング

     

フルオブジェクトマッピングのサポート   洗練されたオブジェクトモデリング:   構成、継承、   ポリモーフィズム、および「持続性   パーシステンスレイヤー   透過的な永続性を実装します。   永続クラスは何も継承しません   特別な基本クラスまたは   特別なインターフェースを実装します。   効率的なフェッチ戦略(遅延   および熱心なフェッチ)およびキャッシング   戦略が実装されている   アプリケーションに対して透過的に。この   機能のレベルはほとんど   自家製の永続性によって達成   レイヤー-数か月または   開発時間の年。数   商用およびオープンソースのJava ORM   ツールはこのレベルを達成しています   品質。このレベルは   これで使用しているORMの定義   本。私たちの問題を見てみましょう   そのツールによって解決されることを期待   完全なオブジェクトマッピングを実現します。

他のヒント

ORM =オブジェクトリレーショナルマッピング。オブジェクトの属性は、realationalデータベースの列にマップされます。そのマッピングは任意であるため、blobに対して行うことができます。実際には、最も有用なのは自然なマッピング(文字列からVarchars、intから整数など)になりがちです。

JPAはORMの標準を探す場所です。 JPAは、面倒であることが判明したEJB CMPアプローチを置き換えます。 JPAを使用すると、マッピングをJavaアノテーションとして表現できます。また、複数のデータベースをサポートする場合は、構成ファイルでマッピングを指定できます。後者が便利な場合があります。

JPAにはクエリ言語があるため、オブジェクト属性に対してクエリを作成できます。

JPAは、主要なApp ServerベンダーおよびHibernateなどの製品でもサポートされています。

JPAは、EJB CMPよりもJPAを使用するのに適していることがわかりました。

トランザクション管理とセキュリティのためにEJB Session Beansファサードを使用することをお勧めします-アノテーションベースのアプローチにより、EJB 2よりもEJB 3を使いやすく、コーディングのオーバーヘッドを最小限に抑えます。

JDOも実際には標準ORMであり、JPA(1 + 2)よりも完全な仕様を提供します。 JPQLはRDBMSの概念に重点を置いているため、SQLを模倣しています。 JDOQLはJava構文に従うため、よりオブジェクトベースです。アプリがRDBMSから離れると見なされるかどうかによって異なります。もしそうなら、JPAは進むべき道ではありません。 RDBMS専用の場合、JPAは間違いなく考慮事項です。

オブジェクトがBLOBにシリアル化されるかどうかは、構成によって異なります。必要に応じて、複雑なオブジェクトタイプに対してこれを行うことができますが、クエリを実行できなくなります。代わりにネイティブ形式で保持する場合は、クエリを実行して、より効率的なアプリに導くこともできます。

-Andy(DataNucleus-JDOおよびJPAの永続性)

scroll top