0

Android プロジェクトでは、ORMLite バージョン 4.45 を使用しています。私は、foreignAutoCreate フィールドを持つ組織モデルを持っています。

組織モデル:

@DatabaseTable
public class Organisation {

    @DatabaseField (id = true)
    private UUID organisationGuid;

    @DatabaseField(foreign=true, foreignAutoCreate = true, foreignAutoRefresh=true)
    private Telnr telNr;

テルン モデル:

@DatabaseTable
public class Telnr {

    @DatabaseField(generatedId = true)
    private int telnrId;

    @DatabaseField
    private String number;

organisationDao.createIfNotExists(organisation) を使用して組織モデルをデータベースに追加すると、すべて問題ありません。組織と telnr テーブルに新しいレコードを作成し、生成された telnr ID を組織テーブルに配置します。

ここで、同じ組織 UUID で新しい組織モデルを作成し、更新を実行します

Organisation organisation = new Organisation();
organisation.setOrganisationGuid('same id');
organisation.setTelNr(new Telnr());
organisationDao.update(organisation);

Telnr テーブルのレコードを含めて、組織テーブルのレコードが更新されることを期待しています。代わりに組織レコードが更新されますが、組織テーブルの telnr id はnullになります。組織と telnr テーブルを更新し、ID をそのままにしておく方法はありますか?

4

1 に答える 1

0

したがって、あなたが何をしようとしているのかよくわからないので、ORMLiteがあなたのコードで何をしているのかを説明します。

Organisation organisation = new Organisation();
organisation.setOrganisationGuid('same id');
organisation.setTelNr(new Telnr());
organisationDao.update(organisation);

Organisationこれは、id を持つデータベースの を更新しています"same id"。オブジェクトの ID が 0 である可能性が最も高いため、代わりにtelNr_idフィールドが に設定されると予想していました。0nullTelnr

Telnr テーブルのレコードを含めて、組織テーブルのレコードが更新されることを期待しています。

これはよくわかりません。ORMLite は、 のオブジェクトにtelnr_id対応するようにフィールドの値を更新しています。追加の変更は行いません。ORMLite は "Lite" を真剣に受け止めており、要求されない限り、裏で何か魔法をかけないようにしています。TelnrOrganisation

フィールドも更新したい場合は、telNrそれも行う必要があります。

organisationDao.update(organisation);
telnrDao.update(organisation.telNr);
于 2013-06-10T14:38:15.060 に答える