Ciao,
2012/4/26 Tiziano Lattisi <
tiziano...@gmail.com>:
> 2012/4/26 Vítor Estêvão Silva Souza <
vitor...@gmail.com>:
>> Meno male che ti è capitato solo questo, perché c'è un altro effetto molto
>> bruttino che ho messo ore per capire: un'entità ancora transiente sul
>> HashMap (oppure HashSet) se diventa transiente cambia il valore di ritorno
>> del hashCode(), e quindi si trova nella posizione sbagliata della
>> collection!
>
> Ah, non male, questo me lo annoto. ;-)
E' veramente importante, però.
Il contratto di hashCode() è che non deve mai cambiare per 2
invocazioni in tempi diversi.
> Interessante l'approccio che proponi, ma il mio framework ha come mandatory
> il doversi appoggiare su un qualunque layer jpa "così come salta fuori
> dall'ide".
Le tue entità devono avere qualche "natural id", immutabile e noto,
sul quale devi basare l'hashcode.
Per esempio una entità user potrebbe avere come natural id l'email, o
il codice fiscale, ecc.
Se non ce l'hanno, forse devi ripensare il modello dati.
Nota che mettere in cache applicativa entità detached è di norma una
pessima idea.
Prova a vedere se te la cavi mettendo in cache solo i metadati
associati alle entity, cioè i getter/setter, property type, ecc.
Tra parentesi, stai percorrendo una strada che - per esempio in Swing
- si è dimostrata problematica dal punto di vista delle performances:
quella di rappresentare il contenuto di una cella di una tabella con
un oggetto diverso per ogni cella.
In Swing hanno usato un approccio diverso, i CellRenderers, che scala
molto meglio.
Simon
--
http://cometd.org
http://intalio.com
http://bordet.blogspot.com
----
Finally, no matter how good the architecture and design are,
to deliver bug-free software with optimal performance and reliability,
the implementation technique must be flawless. Victoria Livschitz