Java >> Java tutorial >  >> Tag >> transient

Hvad er løsrevne, vedvarende og forbigående objekter i dvale?

En new forekomst af en vedvarende klasse, som ikke er knyttet til en Session , har ingen repræsentation i databasen, og ingen identifikationsværdi betragtes som forbigående af Hibernate:

Person person = new Person();
person.setName("Foobar");
// person is in a transient state

En vedvarende instans har en repræsentation i databasen, en identifikatorværdi og er forbundet med en Session . Du kan gøre en forbigående instans vedvarende ved at knytte den til en Session :

Long id = (Long) session.save(person);
// person is now in a persistent state

Nu, hvis vi close dvaletilstand Session , bliver den vedvarende forekomst en løsrevet instans:den er ikke knyttet til en Session længere (men kan stadig ændres og knyttes til en ny Session senere dog).

Alt dette er tydeligt forklaret i hele kapitel 10. Arbejde med objekter i Hibernate-dokumentationen, som jeg kun parafraserer ovenfor. Absolut et must-read.


Objekt i dvale har følgende tilstande:

Forbigående - Objekter, der instansieres ved hjælp af den nye operator, kaldes forbigående objekter.

Et objekt er forbigående, hvis det lige er blevet instansieret ved hjælp af den nye operator, og det ikke er knyttet til en dvale-session. Den har ingen vedvarende repræsentation i databasen, og der er ikke tildelt nogen identifikationsværdi. Forbigående forekomster vil blive ødelagt af skraldeopsamleren, hvis applikationen ikke længere indeholder en reference.

Persistent - Et objekt, der har en databaseidentitet tilknyttet, kaldes et vedvarende objekt.

En persistent forekomst har en repræsentation i databasen og en identifikatorværdi. Det er måske bare blevet gemt eller indlæst; det er dog per definition omfattet af en session. Hibernate vil registrere eventuelle ændringer, der er foretaget på et objekt i vedvarende tilstand, og synkronisere tilstanden med databasen, når arbejdsenheden er færdig.

Løstaget - En løsrevet forekomst er et objekt, der har været vedvarende, men dets session er blevet lukket.

En løsrevet instans kan vedhæftes igen til en ny session på et senere tidspunkt, hvilket gør den vedvarende igen. Denne funktion muliggør en programmeringsmodel for langvarige arbejdsenheder, der kræver brugerens tænketid. Vi kalder dem applikationstransaktioner, dvs. en arbejdsenhed fra brugerens synspunkt.

http://webiwiip.com/interview-questions-answers/hibernate-interview-questions/32012


Lad mig også forklare i Garbage collector synspunkt.

Der er 3 objekttilstande i dvaletilstand (eller) Objektomfang for dvaletilstand-

  1. Forbigående tilstand
  2. vedvarende tilstand
  3. fritliggende tilstand

Det er bedre at forstå med et kodeeksempel-

Lad os betragte en POJO-klasse som Student Object->

Student student = new Student(); 

Nu er dette elevobjekt i forbigående tilstand .

Når vi vedhæfter dette POJO-objekt til dvale-session->

session.save(student);

Nu er dette POJO-objekt i vedvarende tilstand .

(Garbage collector synspunkt - GC kan ikke udslette ethvert objekt, der er i den vedvarende tilstand. Så vi kan sige, at persistent tilstand er som midlertidig opbevaring af POJO-objekter )

Hvis vi udfører->

session.beginTransaction.commit();

så er POJO-objektet i Permanent eller Database-lagringstilstand

(Garbage collector-synspunkt - GC kan ikke slette dette objekt, fordi dette POJO-objekt nu er uden for JVM's omfang og er gemt i formtabellen inde i en database. Så vi kan sige, at denne databaselagertilstand er som permanent lagring til POJO-objekter )

Hvis vi udfører->

session.evict(student); 

så bliver POJO-objektet smidt ud eller fjernet tilbage fra den vedvarende tilstand til løsrevet tilstand. Så denne tilstand af POJO-objektet er løsrevet tilstand .

(Affaldsindsamler synspunkt - GC kan nemt udslette det løsrevne POJO-objekt fra JVM)


Java tag