0

私はこの問題を回避する方法を考えようとしています。複数のカテゴリに属する​​ことができる ORMlite オブジェクトがあります。オブジェクトとカテゴリ間の多対多の接続を追跡するために、別のテーブル (つまり、ForeignCollection) を使用しています。

問題は、変更されたカテゴリでオブジェクトを更新すると、新しいカテゴリが追加されますが、古いカテゴリは削除されません。

DAO の update メソッドの JavaDoc には、次のテキストが表示されます。

注: 通常、これは外部オブジェクトまたは外部コレクションに加えられた変更を保存しません。

私の質問は、「通常」という言葉の使用についてです。これは、更新が関連する外部オブジェクト/コレクションを更新することを確認するために、何らかの設定を行う方法があることを意味しますか?

または、「通常」がそこにないかのように文を読む必要がありますか?

4

3 に答える 3

2

OrmLiteはオブジェクトをForeignCollectionsに自動的に保存しません。これらのオブジェクトは自分で保存および削除する必要があります。Ormliteは、注釈に適切なパラメーターを設定すると、ForeignCollection内のオブジェクトを自動的に取得します。

Ormliteは「ライト」です。ORMを実行しますが、完全ではありません。JPAやHibernateではありません。

于 2012-06-21T19:45:32.183 に答える
2

問題は、変更されたカテゴリでオブジェクトを更新すると、新しいカテゴリが追加されますが、古いカテゴリは削除されません。

したがって、カテゴリの外部コレクションを持つオブジェクトがあります。

@ForeignCollectionField
ForeignCollection<Category> categories;

categories.add(category1)またはを実行するcategories.remove(category1)と、基になるコレクションは、組み込みの DAO を使用して、関連するテーブルからそれらを削除する必要があります。

カテゴリ リストを別の方法で変更する場合はCategory、直接 を使用して手動でエントリを削除する必要がありますcategoryDao

... 「通常」という言葉の使用について。これは、更新が関連する外部オブジェクト/コレクションを更新することを確認するために、何らかの設定を行う方法があることを意味しますか?

「通常」という言葉を残した理由がわかりません。さまざまな自動作成、自動更新などのフィールド設定を考慮に入れることは、包括的な声明だったと思います-よくわかりません。いずれにせよ、コードベースから削除しました。

ORMLiteは、外部オブジェクトが変更されたかどうかを知る方法がありません。外部オブジェクトがいつ更新されたかを知ることができるように、魔法のプロキシ オブジェクトやセッションを作成しません。何をいつ更新したいかを明示する必要があります。外部コレクションに関するドキュメントは、それについて非常に明確です。

于 2012-06-22T13:16:36.763 に答える
0

オブジェクトのforeignCollectionに新しいカテゴリを追加するのではなく、新しいカテゴリをテーブルCategoriesに直接追加することで、この問題を解決しました。これは、カテゴリ ado を作成し、新しい要素を追加するだけで実行できます。newCategory.setObject(object)オブジェクトとの関係を作成するには、 が必要です。

お役に立てれば。

于 2013-12-10T15:27:15.987 に答える