2

AndroidでOrmliteを使用していて、ObjectCacheを有効にすると、UpdateBuilderとColumnExpressionでテーブルを更新した後、古いデータが返されます。ドキュメントを読みましたが、キャッシュを有効にしてUpdateBuilderを使用しても警告は表示されません。

設定テーブルには、最大1〜5行である必要があります。updateColumnExpressionは、行の1つだけをtrueにする簡単な方法のようです。

これは予想される動作ですか?

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

そして、これは古いデータを返す呼び出しです。

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

そして設定DAO:

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

ObjectCacheを無効にすると正しいデータが返されますが、このデータは非常に頻繁にフェッチされるため、保持したいと思います。

ありがとう

4

1 に答える 1

5

これは予想される動作ですか?

残念ながらそうです。を使用してオブジェクトを更新した場合dao.update(...);、キャッシュはオブジェクトを更新する必要があることを認識します。を使用しUpdateBuilderてテーブルに一括変更を加えることにより、影響を受けたオブジェクトをキャッシュが知る方法はありません。

呼び出しが終了したら、キャッシュをクリアする必要がありますUpdateBuilder

于 2013-02-06T16:01:03.993 に答える