Как реализовать каноническое отображение в Java?

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

Мой текущий подход заключается в использовании HashMap > . Ключ является первичным ключом сопоставленного объекта базы данных ( ArrayList , если это составной ключ), а значениями являются WeakReference .

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

Это правильный путь или есть более простой способ реализовать это?

10
задан Björn Pollex 15 September 2011 в 08:58
поделиться