Attualmente sto ruotando il mio piccolo ORM e mi trovo di fronte al compito di creare una mappatura canonica per evitare di caricare la stessa entità dal database più di una volta.Come implementare un mapping canonico in Java?
Il mio approccio attuale è quello di utilizzare un HashMap<Object, WeakReference<Object>>
. La chiave è la chiave primaria dell'entità database mappata (uno ArrayList<Object>
se è una chiave composta) ei valori sono WeakReference<Object>
.
Il mio problema principale è come pulire la mappa? Quando un oggetto non viene più utilizzato, il riferimento debole nella mappa andrà a null
e lo scoprirò solo alla prossima ricerca (o mai, se non guardo di nuovo l'oggetto). Potrei fare in modo che i riferimenti deboli si registrino con uno ReferenceQueue
quando vengono cancellati, e quindi controllano la coda ogni volta che cerco qualcosa. Il riferimento cancellato non mi dava alcun suggerimento su quale oggetto fosse stato cancellato, quindi suppongo che avrei dovuto sottoclasse WeakReference
per memorizzare la chiave nella mappa, così posso rimuoverla dopo che il riferimento è stato cancellato.
È questa la strada da percorrere o esiste un modo più semplice per implementarlo?
All'inizio ho esitato a aggiungere questa libreria, ma ora che l'ho fatto, mi chiedo perché non l'ho fatto prima. Grazie per questa grande risposta! –