Может быть, мой вопрос тупой, и я не знаю, о чем говорю, но все же. Есть ли какой-либо способ принудительно использовать eclipselink (конфигурацию модуля постоянства или менеджера сущностей), чтобы избежать извлечения извлеченных сущностей одного и того же типа из кэша L1 (если это так)?
Пример:
Допустим, у меня есть сущность, помеченная @Cacheable(false)
, в то время как у меня не было никаких дополнительных свойств менеджера сущностей, кроме выключения ткачества. Поэтому, если я дважды выполняю findById()
для одного и того же идентификатора, реальный объект в памяти, возвращенный этими двумя вызовами, будет для меня одинаковым.
Более того, это становится реальным проблемой для мозга, когда у вас есть 2 таблицы, связанные внешним ключом (например, Сотрудник -> Отдел). И сначала вы выбираете родительский объект «Сотрудник», содержащий его дочерний «отдел» (посредством самоанализа). И позже вы извлекаете тот же дочерний объект «Отдел» отдельно для какой-то другой цели (например, заполнение поля выбора, чтобы предложить возможное изменение связанного родительского свойства, то есть перемещение сотрудника в другой отдел). Проблема здесь заключается в том, что «Сотрудник» будет указывать на тот же объект в памяти «Отдел», что и отдельно выбранный объект (один из объектов в моем списке выбора). Поэтому в основном мне нужно постоянно осознавать, что когда я что-то изменяю в дочернем элементе моего родителя (через родителя), я на самом деле изменяю один из моих объектов поля со списком select.
Странно то, что я не получаю такого поведения при запуске для ex. в WildFly (со встроенным eclipselink 2.7), но когда это Spring Boot или какой-то простой внешний контейнер (та же версия eclipselink), это происходит каждый раз.
Кроме того, ожидая некоторых комментариев, я знаю, что я борюсь с самой причиной, по которой был изобретен кэш, и моя проблема больше связана с плохой практикой, но в моем конкретном случае мне нужна старая и плохо написанная система перейти на Spring Boot, и я не знаю, что делать, кроме как полностью переписать его.
Есть идеи?
P.S. Я могу предоставить некоторый код, если мой рассказ не объясняет проблему полностью.