【问题标题】:Inner class always empty when retrieving data using ORMLite database使用 ORMLite 数据库检索数据时,内部类始终为空
【发布时间】: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 注释的变量)。通过调试,我得到了我添加到数据库中的所有比赛的列表,其中包含 rulesForeignCollection 对象。但是,“规则”中的迭代器的大小为 0,即使当我将每个比赛添加到数据库时,每个比赛都有 1 或 2 条规则。
  • 哦,我明白了。我从未与 ORMLite 合作过。对我来说,Rule 似乎不知道 Race。在THIS LINK,我看到了一些关于 eager 的信息,它的默认值为 false。也许您可以尝试将其设置为 true 以避免延迟加载。真的不知道。

标签: java android android-sqlite ormlite


【解决方案1】:

似乎没有根据您提供的代码填充规则的数据库/表。

您需要为“Rule”类创建一个 Dao,并在解析期间使用适当的 addOrUpdateRule(Rule 规则),因为 ORMLite 无法根据其作为“Rule”中的 ForeignCollectionField 的关联自动填充 DB/Table for Rule类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多