Quels sont les objects détachés, persistants et transitoires dans l’hibernation?

Quels sont les objects détachés, persistants et transitoires dans l’hibernation? Veuillez expliquer avec un exemple.

Une new instance d’une classe persistante qui n’est pas associée à une Session n’a aucune représentation dans la firebase database et aucune valeur d’identifiant n’est considérée comme transitoire par Hibernate:

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

Une instance persistante a une représentation dans la firebase database, une valeur d’identifiant et est associée à une Session . Vous pouvez rendre une instance transitoire persistante en l’associant à une Session :

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

Maintenant, si nous fermons la Session Hibernate, l’instance persistante deviendra une instance détachée : elle n’est plus attachée à une Session (mais peut toujours être modifiée et rattachée à une nouvelle Session ultérieurement).

Tout cela est clairement expliqué dans le chapitre 10. Travailler avec des objects de la documentation d’Hibernate que je ne paraphrase que ci-dessus. Certainement, un must-read.

L’object en veille prolongée a les états suivants:

Transient – Les objects instanciés à l’aide du nouvel opérateur sont appelés objects transitoires.

Un object est transitoire s’il vient d’être instancié à l’aide du nouvel opérateur et qu’il n’est pas associé à une session Hibernate. Il n’a pas de représentation persistante dans la firebase database et aucune valeur d’identifiant n’a été atsortingbuée. Les instances transitoires seront détruites par le ramasse-miettes si l’application ne contient plus de référence.

Persistant – Un object qui possède une identité de firebase database associée est appelé object persistant.

Une instance persistante a une représentation dans la firebase database et une valeur d’identifiant. Il pourrait juste avoir été enregistré ou chargé; cependant, c’est par définition dans le cadre d’une session. Hibernate détectera toutes les modifications apscopes à un object à l’état persistant et synchronisera l’état avec la firebase database lorsque l’unité de travail sera terminée.

Detached – Une instance détachée est un object persistant, mais sa session a été fermée.

Une instance détachée peut être rattachée à une nouvelle session ultérieurement, ce qui la rend à nouveau persistante. Cette fonctionnalité active un modèle de programmation pour les unités de travail de longue durée nécessitant un temps de reflection de l’utilisateur. Nous les appelons des transactions d’application, c’est-à-dire une unité de travail du sharepoint vue de l’utilisateur.

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

Laissez-moi vous expliquer du sharepoint vue du ramasse-miettes également.

Il y a 3 états d’object de hibernate (ou) scope d’object d’hibernate-

  1. État transitoire
  2. état persistant
  3. état détaché

Il est préférable de comprendre avec un exemple de code-

Considérons une classe POJO comme object étudiant->

 Student student = new Student(); 

Maintenant, cet object étudiant est en état transitoire .


Lorsque nous attachons cet object POJO pour hibernate la session->

 session.save(student); 

Maintenant, cet object POJO est à l’état persistant .

(Le sharepoint vue du récupérateur de place – GC ne peut pas effacer tout object qui se trouve dans un état persistant. On peut donc dire qu’un état persistant est comme un stockage temporaire pour les objects POJO )


Si nous effectuons->

 session.beginTransaction.commit(); 

alors l’object POJO est à l’état de stockage permanent ou de firebase database

(Le sharepoint vue du récupérateur de place – GC ne peut pas effacer cet object car cet object POJO est désormais hors de la scope de JVM et stocké dans la table de formulaire à l’intérieur d’une firebase database. objects )


Si nous effectuons->

 session.evict(student); 

alors l’object POJO est expulsé ou retiré de l’état persistant vers l’état détaché. Cet état de l’object POJO est détaché .

(Le sharepoint vue du récupérateur de place – GC peut facilement supprimer l’object POJO à l’état détaché de la machine virtuelle Java)

À côté de la réponse correcte déjà identifiée comme persistante, transitoire, détachée ne sont que l’état de l’object en veille prolongée.

Pour être plus précis, ces trois états montrent réellement les modifications apscopes à l’object d’hibernation et l’état du cycle de vie de la session.

Compte tenu de l’entité suivante:

 @Entity public class City { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; // other fields and methods. } 

De la documentation d’Hibernate 5.2 (j’ai également inclus l’état removed ):

transitoire

l’entité vient d’être instanciée et n’est pas associée à un contexte de persistance. Il n’a pas de représentation persistante dans la firebase database et, en général, aucune valeur d’identifiant n’a été atsortingbuée (à moins que le générateur assigné n’ait été utilisé).

 City city = new City(); 

géré ou persistant

l’entité a un identifiant associé et est associée à un contexte de persistance. Il peut ou non exister physiquement dans la firebase database pour le moment.

 // city will be in a managed/persistent state and any changes to it, will be tracked by hibernate // and reflected to the database when the persistence context is flushed. session.save(city); 

détaché

l’entité a un identifiant associé, mais n’est plus associé à un contexte de persistance (généralement parce que le contexte de persistance a été fermé ou que l’instance a été expulsée du contexte)

 // city is in a detached state, Hibernate is no longer aware of the entity session.evict(city) 

enlevé

l’entité a un identifiant associé et est associée à un contexte de persistance, mais elle doit être supprimée de la firebase database.

 session.remove(city); 

Remarque: L’ API Hibernate offre plusieurs méthodes pour passer d’un état d’entité à l’autre et je pense qu’il vaut la peine d’explorer une classe de session Hibernate .