6

Ormlite for Android を使用して、既存のアプリケーションをファイルからオブジェクトのデータベース ストレージに変換しています。データベースに取得する必要があるかなり複雑なオブジェクト データ構造があり、最初は少なくともこれを達成するためにオブジェクト構造をあまり変更したくありません。この既存の構造には、かなりのレベルのネストされた異物があります。

私の質問ですが、foreignAutoCreate は自動的にうまく機能するようです。外部オブジェクトを含むデータベースにオブジェクトを作成すると、それ自体が外部オブジェクトなどを 4 つまたは 5 つのレベルまで下げると、オブジェクトを含むマスターの 1 回の作成で、すべての外部オブジェクトがこれらすべてのレベルまで読み込まれます。

マスター オブジェクトを削除し、含まれている外部オブジェクトのすべてのレベルで ormlite に削除をカスケードさせる方法があるとは思いません。何かが欠けていないことを確認したいのですが、マスターテーブルからの削除時にトリガーを使用してすべてを削除するという、私がやっていることに対するより簡単な解決策はありません。カスケード削除がオプションであることは理解していますが、機能させることはできませんでした。しかし、それが機能したとしても、データベースに一部の構成があり、ormlite に一部の構成があると、最終的に問題が発生する可能性があるため、foreignAutoDelete オプションがないことをまだ疑問に思っています。

現在、これらすべてのレベルの外部オブジェクトを介して更新オプションを完了するのに問題があります。最初は、マスター オブジェクトを作成していましたが、それによってすべての子オブジェクトが作成されました。マスター オブジェクトを更新するか、削除してからマスター オブジェクトを再読み込みしようとしましたが、子に影響がないように見えました (更新されていませんでした)。カスケード削除を追加した後、マスターオブジェクトを削除し、その子をカスケードしてからマスターオブジェクトを再読み込みすると「更新」が有効になると想定しましたが、現在、マスターオブジェクトを再読み込みしても子は追加されません。マスター オブジェクトを追加し直した後に発生する子テーブルの削除トリガーには、タイミング/トランザクションの問題があると考えています。foreignAutoCreate はすべての子オブジェクトに対してオンのままなので、

質問が理にかなっていることを願っています。回答に感謝します。

4

1 に答える 1

7

子の外部キーDatabaseField宣言にcolumnDefinitionパラメーターを追加します。この例では、ドキュメントが親です。DocumentEntityはクラスの名前ですが、テーブル名は「document」として定義されています

 @DatabaseField(canBeNull = false, foreign = true, index = true, foreignAutoRefresh = true, columnDefinition = "integer references document(id) on delete cascade")
 private DocumentEntity document;
于 2013-03-18T04:33:23.147 に答える