たとえば、HibernateはCouchDbを処理できますか?
他のORMソリューションでの他のOOデータベースのサポートはどうですか?
ORMソリューションの(それほど重要ではない)利点の1つは、あるデータベースベンダーを別のデータベースベンダーに交換できることです。リレーショナルデータベースをオブジェクト指向データベースに交換するとどうなりますか?
たとえば、HibernateはCouchDbを処理できますか?
他のORMソリューションでの他のOOデータベースのサポートはどうですか?
ORMソリューションの(それほど重要ではない)利点の1つは、あるデータベースベンダーを別のデータベースベンダーに交換できることです。リレーショナルデータベースをオブジェクト指向データベースに交換するとどうなりますか?
「他のORMソリューションでの他のOOデータベースのサポートはどうですか?」
オブジェクトリレーショナルマッピング(ORM)は、この問題の解決策です。
プログラム内のオブジェクト。
リレーショナルデータベース。
両方の部分(オブジェクト指向プログラム、リレーショナルデータベース)がない限り、問題がないため、ORMを使用することはできません。
Cプログラムを作成している場合、ORMを使用することはできません。マップするオブジェクトがありません。
リレーショナルデータベースを使用していない場合、ORMを使用することはできません。マップするリレーショナルデータベースがありません。
OODBでORMを使用する必要はありません。解決する問題はありません。
私の理解(ここでは「間違っている可能性がある」という通常の警告)は、オブジェクト指向データベースではORMソリューションが機能しないことです。これは、OOデータベースがORMソリューションの必要性を排除するためです。
一般に、ORMは、リレーショナルモデルを抽象化し、コードのロジックからリレーショナルモデルとオブジェクト指向システムの不一致を抽象化するために使用されます。また、レガシーシステムが機能し続けるためにしばしば必要とされる従来のデータベースの使用を可能にしますが、OO方式で関係を処理する自由を提供します。
抽象化は、ORMを使用することの本当の利点であるimoです。データベースベンダーの交換は、一部の人が理解しているほど簡単ではありません。特に、JDBCドライバーに多くのカスタム操作とカスタム動作があるOracleのようなデータベースからまたはデータベースに切り替える場合はそうです。
あなたの質問に対するもう1つの要素は、リレーショナルデータベースからオブジェクト指向データベースに同じベースラインデータベースモデルを使用する可能性は低いということです。このようなパラダイムシフトは、必要ではないにしても、基盤となるコアシステムのロジックと接続動作を再考することをお勧めすると思います。
リレーショナルデータベースをオブジェクト指向データベースに交換するとどうなりますか?
これはJDOで可能になるはずだと思います。実際、私の記憶では、JDOはOODMBSベンダーによって作成および促進されており、この標準はOODBMSと対話するための一種の統一された方法であると考えています(マスタープランは2つのステップでした:最初に、お客様、永続性のためにJDO実装を使用します次に、お客様の皆様、Oracle / Sybase / Whateverデータベースを私のVersantデータベースに置き換えてください)。
しかし、私はJDOを「ORM」として定義しません。それはより透過的なオブジェクト永続性標準です(ストレージシステムがリレーショナル(ORMのR)データベースである場合にORMツールとして機能できます)。
「ORM」の「R」は「リレーショナル」を意味するので、ODBMSにはまったく当てはまらないと思います。
オブジェクトデータベースを使用することの全体的なポイントは、オブジェクトを永続化できることです。それらがある場合、何のためにマッピングする必要がありますか?
あなたが話している種類のスワッピングは、実装に依存しない永続性インターフェースを持つことによって達成されると思います。それができれば、リレーショナルデータベースとオブジェクトデータベースを入れ替えることができます。多分このようなもの:
package persistence;
import java.io.Serializable;
import java.util.List;
public interface GenericDao<T, K extends Serializable>
{
T find(K id);
List<T> find();
List<T> find(T example);
K save(T instance);
void update(T instance);
void delete(T instance);
}
言語にもよりますが、JSONの操作は、クラスインスタンスの操作よりも簡単です。
IMHO ORMは、JSONシリアル化オブジェクトを使用して、ストレージ形式としてJSONを使用するのに十分スマートなNoSQLデータベースにそれらをプッシュすることから一歩後退したものです。