Accés a Dades
8.2 - Estats d'un objecte Hibernate
Els objectes de les classes que Hibernate ens ha ajudat a crear poden estar en més d'un estat, si mirem la seua sincronització amb la Base de Dades:
- Transitori: quan l'objecte s'ha creat, però no s'ha associat a cap sessió. És a dir, ja s'ha creat amb new i potser estiga buit o no (ja se li ha posat algun valor a alguna propietat amb els mètodes set), però encara no s'ha associat a cap sessió. Es podrà associar per exemple amb save() per a guardar l'objecte com hem vist en l'exemple de l'apartat anterior, o per exemple amb load(), com havíem vist en exemples anteriors per a agafar des de la Base de Dades.
- Persistent: quan l'objecte ja s'ha associat amb una sessió i per tant té una representació en la Base de Dades i un valor identificador. Es pot haver guardat o carregat. Hibernate detectarà qualsevol canvi fet sobre un objecte persistent i sincronitzarà l'estat quan es complete la unitat de treball. I per a això ja s'encarregarà ell de fer els INSERT, DELETE o UPDATE en la Base de Dades. Nosaltres no ens haurem de preocupar.
- Separat: és un objecte persistemt, però que la seua sessió ha finalitzat. Es pot utilitzar, i fins i tot canviar l'estat, però no tindrà efecte aquestos canvies la Base de Dades, a no ser que es torne a associar una altra vegada amb una sessió, és a dir, si es torna a fer persistent. De fet, és una tècnica de treball, utilitzar objectes separats quan l'usuari puga estar molt de temps sense interactuar, i quan torne a interactuar, tornar a fer-lo persistent.
Anem a veure un exemple on es vegen els tres tipus d'estat. Tampoc cal que el feu vosaltres, està únicament a nivell il·lustratiu:
Session sessio = sf.openSession();
Transaction t = sessio.beginTransaction();
Comarques com = new Comarca(); // A partir d'ací l'objecte és transitori
com.setNomC((String) "Columbretes");
com.setProvincia("Castelló");
sessio.save(com);
sessio.save(com); // A partir d'ací és persistent
t.commit();
sessio.close(); // A partir d'ací és separat, igual es pot utilitzar,
// però no estarà sincronitzat
System.out.println(com.getNomC() + " (" + com.getProvincia() + ")");
Llicenciat sota la Llicència Creative Commons Reconeixement NoComercial CompartirIgual 2.5