Кэш iBATIS не очищается от данных операторов - PullRequest
0 голосов
/ 19 марта 2009

Я использую iBatis для взаимодействия с базой данных. В последнее время я пытаюсь улучшить производительность некоторых статических выборок данных путем настройки кэширования. Chache был настроен и работал должным образом, однако проблема заключается в сбросе данных кэша всякий раз, когда происходит какая-либо вставка / обновление / удаление этих данных. Я сделал следующую конфигурацию для таблицы категорий,

<cacheModel  type="LRU" id="categoryCache"  readOnly="true" serialize="false">
    <flushOnExecute statement="insertCategory"/>
    <flushOnExecute statement="updateCategory"/>
    <flushOnExecute statement="deleteCategory"/>
    <property name="size" value="1000"/>
</cacheModel>

<insert id="insertCategory"
    parameterClass="com.uniplas.entity.master.beans.CategoryVO">
    insert into categories (code, description)
    values(#code:VARCHAR#,#description:VARCHAR#)
</insert>

<update id="updateCategory"
    parameterClass="com.uniplas.entity.master.beans.CategoryVO">
    update categories set description=#description:VARCHAR# where code=#code:VARCHAR#
</update>

<delete id="deleteCategory"
    parameterClass="com.uniplas.entity.master.beans.CategoryVO">
    delete from categories where code=#code:VARCHAR#
</delete>

<select id="selectCategory" resultMap="categoryResult"
    parameterClass="java.util.Map" cacheModel="categoryCache">
    select * from categories where 1=1
    <dynamic>
        <isNotEmpty property="categoryVO.code">
            and code like #categoryVO.code:VARCHAR#
        </isNotEmpty>
        <isNotEmpty property="categoryVO.description">
            and description like
            #categoryVO.description:VARCHAR#
        </isNotEmpty>
        <isNotEmpty property="orderBy">
            order by $orderBy$
        </isNotEmpty>

    </dynamic>
</select>

Теперь проблема в том, что даже если выполняется любой из операторов insertCategory / updateCategory / deleteCategory, кэш не очищается. Он сохраняет данные, которые были выбраны до вставки / обновления / удаления!

Пожалуйста, дайте мне знать, где я иду не так.

1 Ответ

0 голосов
/ 20 ноября 2009

Попробуйте установить в кеше readOnly = "false" - из документации:

Фреймворк поддерживает только чтение и читать / писать кеши. Только для чтения кэши распределяются между всеми пользователями и поэтому предлагают большую производительность выгода. Тем не менее, объекты читаются из кэш только для чтения не должен быть модифицирована. Вместо этого новый объект должен быть прочитанным из базы данных (или кэш для чтения / записи) для обновления. На С другой стороны, если есть намерение использовать объекты для поиска и модификация, кэш для чтения / записи рекомендуется (т.е. требуется). Чтобы использовать кэш только для чтения, установите readOnly = ”true” на элементе модели кэша. Чтобы использовать чтение / запись кеша, установка = доступен только для чтения»ложь». По умолчанию только для чтения (правда).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...