Hibernate second- Уровень составного идентификатора кэша

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

Есть ли у Hibernate проблемы с кэшированием составных идентификаторов второго уровня?

Соответствующая информация:

  1. Использование Hibernate 3.1, ehcache 2.4.2
  2. Класс Composite ID реализует сериализуемые
  3. Я использую новый сеанс Hibernate при выполнении запроса во второй раз
  4. Я использую hibernateTemplate.load (класс, ID) для получения объекта

Вот как я создаю свой идентификатор и выполняю свой запрос :

CompositeId id = new CompositeId(date, sessionId);
UserDetails user = (UserDetails) hibernateTemplate.load(UserDetails.class, id);

И вот как мой файл отображения постоянства определяет вышесказанное:

<class name="com.entities.UserDetails"
        table="USER_DETAILS" 
        lazy="false">
    <cache usage="read-write"/>

    <composite-id name="userId" class="com.entities.CompositeId" unsaved-value="undefined">
        <key-property name="userSessionId" column="SESSION_ID" />
        <key-property name="dateCreated" column="DATE_CREATED" type="date" />
    </composite-id>

РЕДАКТИРОВАТЬ: Сюжет становится более плотным ....

Когда я изменил это на политику кэширования только для чтения, она работала нормально. Поведение транзакционного кеша кажется крайне непредсказуемым. Может ли кто-нибудь объяснить, почему вышеупомянутое произошло с кешем чтения-записи, но нормально работало с режимом только для чтения? Эта таблица не обновляется, поэтому не знаю, почему семантика транзакций изменила ситуацию в этом случае.

8
задан sma 17 June 2011 в 14:41
поделиться