Я пытаюсь кэшировать объект в кэше второго уровня Hibernate, у которого есть составной идентификатор, отображенный в моем файле отображения постоянства. В журналах указано, что при первом запуске запроса класс, отображаемый как составной идентификатор, помещается в кеш. Однако, когда я запускаю запрос во второй раз, объект не извлекается из кеша. Вместо этого он снова выполняет запрос.
Есть ли у Hibernate проблемы с кэшированием составных идентификаторов второго уровня?
Соответствующая информация:
Вот как я создаю свой идентификатор и выполняю свой запрос :
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>
РЕДАКТИРОВАТЬ: Сюжет становится более плотным ....
Когда я изменил это на политику кэширования только для чтения, она работала нормально. Поведение транзакционного кеша кажется крайне непредсказуемым. Может ли кто-нибудь объяснить, почему вышеупомянутое произошло с кешем чтения-записи, но нормально работало с режимом только для чтения? Эта таблица не обновляется, поэтому не знаю, почему семантика транзакций изменила ситуацию в этом случае.