2 votes

Ormlite ObjectCache renvoie des anciennes données

Je utilise Ormlite sur Android et avec le cache d'objets activé, je reçois des données obsolètes après la mise à jour de la table avec un UpdateBuilder et une ColumnExpression. J'ai lu la documentation et cela ne met pas en garde contre l'utilisation de l'UpdateBuilder avec le cache activé.

La table des paramètres devrait avoir au maximum 1 à 5 lignes. La mise à jour de la ColumnExpression semble être un moyen facile de permettre à une seule des lignes d'être vraie.

Est-ce le comportement attendu ?

public void setActiveSetting(String id)
{
    try {
        UpdateBuilder updateBuilder2 = getHelper().getSettingsDao().updateBuilder();
        updateBuilder2.updateColumnExpression("actif", "id = " + id );
        updateBuilder2.update();
    } catch (SQLException e){
        e.printStackTrace();
    }
}

Et ceci est l'appel qui renvoie les données obsolètes :

public List getSettings() 
{
    List settings = null;
    try  {
        settings = getHelper().getSettingsDao().queryForAll();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return settings;
}

Et le DAO des paramètres :

public Dao getSettingsDao() 
{
    if (null == settingsDao) {
        try {
            settingsDao = getDao(Settings.class);
            settingsDao.setObjectCache(true);
        } catch (java.sql.SQLException e) {
            e.printStackTrace();
        }
    }
    return settingsDao;
}

Désactiver le cache d'objets renvoie les données correctes, mais ces données sont récupérées assez fréquemment, donc j'aimerais le conserver.

Merci

5voto

Gray Points 58585

Est-ce le comportement attendu?

Malheureusement, oui. Si vous aviez mis à jour l'objet en utilisant dao.update(...); alors le cache saurait que l'objet devait être rafraîchi. En utilisant le UpdateBuilder pour apporter des modifications de masse à la table, il n'y a aucun moyen pour le cache de savoir quels objets ont été affectés.

Vous devrez vider le cache après que votre appel au UpdateBuilder soit terminé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X