私の会社は、ORMのためにmorphiaを使用したjavaプロジェクトに接続されたmongodbを使用します。最近、コードベースのリファクタリングが行われ、パッケージ名が変更されました。残念ながら、パッケージ名の変更により、既存のデータベースに問題が生じました。既に生産中の顧客がいるため、データベースを更新し、製品を更新するときにはじめて開始するように指示することはできません。オブジェクトクラスのリファクタリング後の生産におけるMorphia/mongodbの更新
私は2つのアプローチを試みました。 1つは、classNameフィールドの古い値を持つすべてのエントリを正しい値に更新するスクリプトを作成することでした。 もう1つの方法は、すべてのエントリからclassNameフィールドを削除し、noClassnameStoredアノテーションをクラスに追加することでした。
いずれの方法も既存のデータベースを新しいバージョンの製品の下に読み込むことはできませんでした。私は今、おそらく問題は、私たちが使用する組み込みオブジェクトであると考えています。私たちの "Job"クラスには、JobParametersをクラスとして使用するparametersというフィールドがあります。次に、フィールドに派生クラスを設定します(例:MigrationJobParametersはJobParametersを拡張します)。これらのクラス(JobParameters基底クラスだけでなく)の両方とも、 "embedded"と "concreteClass ="注釈を使用します。 私はmorphiaが先に進み、データベースオブジェクトにclassNameフィールドを追加することに気付きました。これは私にとって意味のあるものです。
Javaが終了すると、JobParametersをMigrationJobParametersにキャストできないという例外がスローされます。これはもう一度意味をなさないものです。
私の質問は、オブジェクトの名前空間が変更された後に継承を持つ埋め込みオブジェクトを含む既存のデータベースを更新する方法です。