【问题标题】:Persist HashMap in ORMLite在 ORMLite 中持久化 HashMap
【发布时间】:2011-11-01 15:00:15
【问题描述】:

我在我的 Android 应用中使用 ORMLite。我需要坚持这个类,它有一个 HashMap。有什么好的坚持方法?这是我第一次尝试持久化 HashMap,也是第一次使用 ORMLite,所以任何建议都将不胜感激!

*编辑* 如果这有什么不同的话,Exercise 类只是一个 String(在数据库中也用作 id),而 Set 类有一个 int id(在数据库中也是 id)、int weight 和 int reps。

@DatabaseTable
public class Workout {

    @DatabaseField(generatedId = true)
    int id;

    @DatabaseField(canBeNull = false)
    Date created;

    /*
     * The hashmap needs to be persisted somehow
     */
    HashMap<Exercise, ArrayList<Set>> workoutMap;

    public Workout() {          
    }
    public Workout(HashMap<Exercise, ArrayList<Set>> workoutMap, Date created){
        this.workoutMap = workoutMap;
        this.created = created;
    }

    public void addExercise(Exercise e, ArrayList<Set> setList) {
        workoutMap.put(e, setList);
    }
    ... 
}

【问题讨论】:

    标签: java android orm hashmap ormlite


    【解决方案1】:

    哇。持久化一个HashMap,其值为ListSets。令人印象深刻。

    所以在ORMLite 中,您可以保留任何Serializable 字段。以下是有关类型以及如何配置它的文档:

    http://ormlite.com/docs/serializable

    所以你的字段看起来像:

    @DatabaseField(dataType = DataType.SERIALIZABLE)
    Map<Exercise, List<Set>> workoutMap;
    

    请注意,如果地图很大,那么这很可能不会非常高效。此外,您的Exercise 类(以及ListSet 类)需要实现Serializable

    如果您需要搜索此映射,您可以考虑将 Set 中的值存储在另一个表中,在这种情况下,您可能想看看 ORMLite 如何持久化 "foreign objects"

    【讨论】:

    • 先生,您是英雄。太感谢了!作为记录,我还需要在练习和设置类中添加“实现可序列化”。
    • 你好 Gray,我有一个关于持久化 Maps 的问题:据我所知,ormlite 中仅支持 Collections 以实现持久性,以及foreigncollections - 还是我在这里混合了一些东西?
    • 在邮件列表@Ready4Android 上提问。你是对的。 groups.google.com/group/ormlite-user
    猜你喜欢
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    相关资源
    最近更新 更多