Sto sperimentando un problema relativamente alla gestione delle chiavi con MapDB.
Il mio database è di questo tipo:
ConcurrentNavigableMap<Integer, Offerta> offerte = db.getTreeMap("offerte");
Integer rappresenta il tipo di chiave, Offerta è il tipo di oggetto che la mappa deve mantenere.
Ora, io ho diverse mappe i cui dati sono relazionati fra loro. Con MySql potevo tranquillamente lasciare a lui la gestione del discorso chiavi/id, ma con MapDB questo non mi sembra possibile (se qualcuno può smentirmi, ben venga!). Per cui l'unica soluzione che ho trovato è una cosa del genere, che viene fatta ad ogni inserimento di oggetti nella mappa/db:
Tuttavia con questo sistema se quando rimuovo un'offerta dal db se questa è l'ultima inserita il suo id viene riassegnato perché offerte.lastKey(); estrae chiaramente l'ultima chiave disponibile e se quella che prima era l'ultima non c'è più, lo diventa la precedente.codice:int ultimoIdOfferte=0; //inizializzo la chiave if (offerte.lastEntry() == null) { ultimoIdOfferte = 1; } // Altrimenti estraggo ID da assegnare else { ultimoIdOfferte = offerte.lastKey(); }
Ciò può portare a problematiche nella coerenza dei dati nel caso in cui ci sia qualche dato che ha a sua volta memorizzato un riferimento all'id di quell'offerta.
Come posso risolvere in maniera più efficiente? Fondamentalmente devo fare in modo che un id già utilizzato non venga mai più riassegnato.
Grazie.