简介
我有两个实体:
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 */
这种行为得到了很好的保护,但不是外国的异常现象。 所以它部分工作,我不知道为什么我有这种行为。
你能帮助我吗?
答案 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并填充检查表!
请确认,测试!