Actualmente estoy desarrollando mi propio pequeño ORM, y me encuentro ante la tarea de crear un mapeo de canonización para evitar cargar la misma entidad de la base de datos más de una vez.¿Cómo implementar una asignación de canonicalización en Java?
Mi enfoque actual es utilizar un HashMap<Object, WeakReference<Object>>
. La clave es la clave principal de la entidad de base de datos asignada (un ArrayList<Object>
si es una clave compuesta), y los valores son WeakReference<Object>
.
Mi problema principal es cómo limpiar el mapa? Cuando un objeto no se usa más, la referencia débil en el mapa irá al null
, y solo lo descubriré en la siguiente búsqueda (o nunca, si no vuelvo a mirar el objeto). Podría hacer que las referencias débiles se registren con un ReferenceQueue
cuando se borren, y luego verificar esa cola cada vez que busco algo. Sin embargo, la referencia borrada no me dio ninguna pista sobre qué objeto se borró, así que supongo que tendré que crear la subclase WeakReference
para almacenar la clave en el mapa, por lo que puedo eliminarla una vez que se borre la referencia.
¿Es este el camino a seguir, o hay alguna forma más sencilla de implementar esto?
Al principio dudé en añadir esta biblioteca, pero ahora que lo hice, me pregunto por qué no lo hice antes. ¡Gracias por esta gran respuesta! –