1

私のプロジェクトでは、外部アノテーションをキャッシュし、カスケードを手動ですべて挿入および削除しましたが、新しいforeignAutoCreateアノテーションを使用するようにコードを更新しようとしていますが、いくつかの問題に気づきました。1つ目は、DatabaseFieldConfigLoaderが生成された構成ファイルにこのフィールドを追加しないことです。そのクラスのバージョン4.29の212行目あたりに適切なコードが欠落しているように見えます。

設定ファイルに手動で定義を追加した後でも、設定ファイルをロードするときに正しく設定されていないようです。MappedCreateクラスの102行目で、tableInfo.isForeignAutoCreate()は、アノテーションが設定されているクラスに対してfalseを返します。

参考までに、これは私がクラスメンバーを宣言した方法です。

@DatabaseFieldSimple
@DatabaseFieldForeign(foreign = true, foreignAutoRefresh=true, foreignAutoCreate=true)
public Response response;

そして、私の子クラスResponseには次のidフィールドがあります

@DatabaseFieldSimple
@DatabaseFieldId(generatedId = true)
public int id;

何か案は?

4

2 に答える 2

3

残念ながら、foreignAutoRefreshフィールド(および)は、クラス構成の読み取りと書き込みの両方に--versionを使用して正しく構成されていません。このバグDatabaseFieldConfigLoaderを開いてトランクで修正しました。この修正は、バージョン4.30でORMLiteに追加されました。

@DatabaseFieldの最後にコメントを追加して、[うまくいけば]将来これから保護します。

バグでごめんなさい。

于 2011-11-04T18:21:44.583 に答える
2

このリンクは非常に便利です。(foreignAutoCreate = true)の使用に関する注意事項を確認してください。

  1. (foreignAutoCreate = true)ORMliteドキュメントhttp://ormlite.com/javadoc/ormlite-core/com/j256/ormlite/field/DatabaseField.htmlに従ってIDフィールドが設定されていない(nullまたは0)場合にのみ機能します

    externalAutoCreate: "IDフィールドが設定されていない(nullまたは0)場合、外部フィールドが内部DAOを使用して自動的に作成されるようにするには、これをtrue(デフォルトはfalse)に設定します。"

  2. これは、 ORMliteのドキュメントに従って、生成されたIdが子テーブルに対してもtrueに設定されている場合にのみ機能します。

于 2013-10-12T22:09:55.647 に答える