在ORMLite中保留HashMap

时间:2011-08-23 03:18:13

标签: java android orm hashmap ormlite

我在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);
    }
    ... 
}

1 个答案:

答案 0 :(得分:12)

哇。坚持HashMap,其值为List Set秒。令人印象深刻的。

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

  

http://ormlite.com/docs/serializable

所以你的领域看起来像是:

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

请注意如果地图非常大,那么这很可能不是很有效。此外,您的Exercise班级(以及ListSet班级)需要实施Serializable

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