В настоящее время я накручиваю свою собственную маленькую ORM и сталкиваюсь с задачей создания канонического отображения, чтобы предотвратить загрузку одного и того же объекта из базы данных более одного раза.
Мой текущий подход заключается в использовании HashMap
. Ключ является первичным ключом сопоставленного объекта базы данных ( ArrayList
, если это составной ключ), а значениями являются WeakReference
.
Моя основная проблема - как очистить карту? Когда объект больше не используется, слабая ссылка на карте будет иметь вид null
, и я обнаружу это только при следующем поиске (или никогда, если я не буду искать объект снова) . Я мог бы зарегистрировать слабые ссылки с помощью ReferenceQueue
, когда они очищаются, а затем проверять эту очередь каждый раз, когда я что-то ищу. Очищенная ссылка не дала мне никаких подсказок относительно того, какой объект был очищен, поэтому я предполагаю, что мне придется создать подкласс WeakReference
для хранения ключа на карте, чтобы я мог удалить его после очистки ссылки .
Это правильный путь или есть более простой способ реализовать это?