Сохранять HashMap в ORMLite - PullRequest
       19

Сохранять HashMap в ORMLite

9 голосов
/ 23 августа 2011

Я использую ORMLite в своем приложении для Android.Мне нужно сохранить этот класс, который имеет 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 Ответ

12 голосов
/ 23 августа 2011

Ничего себе. Сохранение значения HashMap, значение которого равно List из Set с. Впечатляет.

Таким образом, в ORMLite можно сохранить любое поле Serializable. Вот документация о типе и о том, как его настроить:

http://ormlite.com/docs/serializable

Итак, ваше поле будет выглядеть примерно так:

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

Обратите внимание , что если карта вообще большая, то это, скорее всего, будет не очень производительным. Кроме того, ваш класс Exercise (и классы List и Set) должны реализовать Serializable.

Если вам нужен поиск по этой карте, вы можете рассмотреть вопрос о сохранении значений в Set в другой таблице, и в этом случае вам может понадобиться посмотреть, как ORMLite сохраняет «чужие объекты» .

...