更新后,foreignAutoCreate字段为null

时间:2013-06-07 12:06:03

标签: java android ormlite

对于一个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;

Telnr型号:

@DatabaseTable
public class Telnr {

    @DatabaseField(generatedId = true)
    private int telnrId;

    @DatabaseField
    private String number;

当我使用organisationDao.createIfNotExists(组织)将组织模型添加到数据库时,一切都很好。它在组织和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完整?

1 个答案:

答案 0 :(得分:0)

所以我不太确定你要做什么,所以我只会解释ORMLite对你的代码做了什么:

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

这是更新标识为Organisation的数据库中的"same id"。我原本期望telNr_id字段设置为0而不是null,因为Telnr对象的ID很可能是0。

  

我希望更新组织表中的记录,包括Telnr表中的记录。

我不太明白这一点。 ORMLite正在更新telnr_id字段的值,以对应Telnr中的Organisation对象。它不会做任何其他更改。 ORMLite认真对待“精简版”并且除非被要求,否则不会在封面上做任何魔术。

如果您还想更新telNr字段,那么您也需要这样做:

organisationDao.update(organisation);
telnrDao.update(organisation.telNr);