Android ORMLite在保存或不刷新时不设置外部

时间:2015-04-01 09:37:46

标签: android ormlite

简介

我有两个实体:

TRAITEMENT

@DatabaseTable(tableName = "traitement", daoClass = TraitementNettoyageDAO.class)
public class TraitementEntity implements Parcelable {


    @DatabaseField(generatedId = true)
    private int id;
    @ForeignCollectionField(eager = true)
    private Collection<AnomalieNettoyageEntity> mListAnomalieNettoyage;

    public TraitementEntity() {
    }

    // omitting getter/setter and parcelable job
}

Anomalie

@DatabaseTable(tableName = "anomalies", daoClass = AnomalieDAO.class)
public class AnomalieEntity implements Parcelable {


    @DatabaseField(generatedId = true)
    private int id;

    @DatabaseField
    private String mIdAnomalie;


    @DatabaseField(foreign = true, columnName = "traitementForeignId", foreignAutoRefresh = true, canBeNull = false)
    private TraitementEntity traitementForeign;

    // omitting getter/setter and parcelable job
}

我实际上是在使用以下方法将数据保存在数据库中:

function void save(TraitementEntity obj){
 for (AnomalieEntity n : obj.getmListAnomalie()) {
                n.setTraitementForeign(obj);
            }

    create(obj);
}

问题

问题是当我需要在本地数据库中保存我的行为时,似乎我什么都没有:

Log.i("OBJECT ANOMALIE SIZE", obj.getmListAnomalie().size() + ""); // gives 3
save(obj);

List<TraitementEntity> liste = mServiceLocal.getAllLocalTraitements();
for (TraitementEntity n : liste)
    Log.i("OBJECT ANOMALIE SIZE 2", n.getmListAnomalie().size() + ""); // gives always 0

/* This getmListeAnomalie() corresponds to the standard try/catch for queryForAll(), nothing else */

这种行为得到了很好的保护,但不是外国的异常现象。 所以它部分工作,我不知道为什么我有这种行为。

你能帮助我吗?

2 个答案:

答案 0 :(得分:1)

您可以尝试将foreignAutoCreate = true设置为DatabaseField注释,如下所示:

@DatabaseField(foreign = true, columnName = "traitementForeignId", foreignAutoRefresh = true, foreignAutoCreate = true, canBeNull = false)

以下是docs

的解释
  

将此设置为true(默认为false)以使外部字段为   如果ID字段不是,则使用其内部DAO自动创建   set(null或0)。

答案 1 :(得分:1)

确认问题。

在他的TraitementEntity类中不包含 getmListAnomalie()方法 它与此不同:

for ( n AnomalieEntity : obj.getmListAnomalie ()) 

不会

for ( AnomalieNettoyageEntity n : obj.mListAnomalieNettoyage ()) {
    n.setTraitementForeign ( obj) ;
}

其他选择。 在托管的示例(SqlLite浏览器)中加载数据库SqlLite并填充检查表!

请确认,测试!