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

Android ORMLite在保存或不刷新时未设置外部,android,ormlite,Android,Ormlite,导言 我有两个实体: 叛徒 @DatabaseTable(tableName = "traitement", daoClass = TraitementNettoyageDAO.class) public class TraitementEntity implements Parcelable { @DatabaseField(generatedId = true) private int id; @ForeignCollectionField(eager = tru

导言

我有两个实体:

叛徒

@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
}
实际上,我正在使用以下命令将我的文件保存到数据库中:

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

    create(obj);
}
问题

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

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 */
Log.i(“对象异常大小”,obj.getmListAnomalie().SIZE()+”);//给出3
保存(obj);
List liste=mServiceLocal.getAllLocalTraitements();
对于(TraitementEntity n:liste)
Log.i(“对象异常大小2”,n.getmListAnomalie().SIZE()+”);//给总是0
/*这个getmListeAnomalie()对应于queryForAll()的标准try/catch,没有其他内容*/
叛徒得到了很好的拯救,但外国的异象却没有。 所以它部分起作用了,我不知道为什么我会有这种行为


您能帮助我吗?

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

@DatabaseField(foreign = true, columnName = "traitementForeignId", foreignAutoRefresh = true, foreignAutoCreate = true, canBeNull = false)
以下是他们的解释:

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

确认问题

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

for ( n AnomalieEntity : obj.getmListAnomalie ()) 
不会

for ( AnomalieNettoyageEntity n : obj.mListAnomalieNettoyage ()) {
    n.setTraitementForeign ( obj) ;
}
其他选择。 在托管示例(SqlLite浏览器)中加载数据库SqlLite,并填充检查表


请确认,测试

您是否尝试过创建子项而不是父项,即尝试插入AnomalieEntity对象。如果我是对的,OrmLite应该自动插入叛逆者。
for ( AnomalieNettoyageEntity n : obj.mListAnomalieNettoyage ()) {
    n.setTraitementForeign ( obj) ;
}