【发布时间】:2014-02-04 07:47:27
【问题描述】:
我在我的 Android 应用程序中使用 ORMLite,我正在尝试持久化和查询嵌套类。创建和更新模型是没有错误的,但我不知道它是否会按照我的预期保留模型。当我查询模型时,我得到了外部类的数据,但它永远不会得到内部类的数据。这是我的模型(为了便于阅读而删减):
@DatabaseTable
public class Race {
@DatabaseField(id = true)
private String raceId;
@DatabaseField
private String name;
@ForeignCollectionField
private Collection<Rule> rules;
@DatabaseTable
public static class Rule {
@DatabaseField
private long ruleId;
@DatabaseField
private String name;
@DatabaseField(foreign = true)
private Race race;
}
}
我的添加方法:
public boolean addOrUpdateRace(Race race) {
CreateOrUpdateStatus status = mHelper.getRaceDao().createOrUpdate(race);
return status.isCreated() || status.isUpdated();
}
我的查询方法:
public List<Race> getAllRaces() {
return mHelper.getRaceDao().queryForAll();
}
来自getAllRaces 的列表填充了所有预期的变量(raceId 和名称),并有一个ForeignCollection 代表rules。当我尝试访问 rules 时,我得到一个大小为 0 的迭代器。
我不确定如何处理 Rule 类中的 Race 变量,我只知道当我不包含它时 ORMLite 会抛出错误。我尝试将其保留为空,希望 ORMLite 会自动与其父级建立连接,当这不起作用时,我尝试在持久化之前设置 race 变量,但效果相同。
我哪里出错了?
【问题讨论】:
-
您能否发布您的 getForAll 查询和结果图?
-
@ThrashBean 查询方法是我最后贴的方法。 “结果图”是什么意思?查询返回的列表?
-
是的,您从查询中返回的内容。我想你在你的 xml 中定义它。
-
@ThrashBean 我不必在 XML 中为 ORMLite 定义任何东西。我从查询中得到的所有数据都在模型类中定义(用
@DatabaseField和@ForeignCollectionField注释的变量)。通过调试,我得到了我添加到数据库中的所有比赛的列表,其中包含rules的ForeignCollection对象。但是,“规则”中的迭代器的大小为 0,即使当我将每个比赛添加到数据库时,每个比赛都有 1 或 2 条规则。 -
哦,我明白了。我从未与 ORMLite 合作过。对我来说,Rule 似乎不知道 Race。在THIS LINK,我看到了一些关于 eager 的信息,它的默认值为 false。也许您可以尝试将其设置为 true 以避免延迟加载。真的不知道。
标签: java android android-sqlite ormlite