méthode get()

Si vous souhaitez obtenir un objet par son ID (ou clé primaire), alors Hibernate a trois méthodes pour cela :

  • charger()
  • obtenir()
  • trouver()

Ils font la même chose, mais il y a des nuances. Le format général de la méthode get() est :

EntityClass Name = session.get(EntityClass.class, Object primaryKey);

La méthode get() prend comme deuxième paramètre l'ID (clé primaire) de l'objet qu'elle doit renvoyer. Il charge ensuite cet objet à partir de la base de données et le renvoie. Exemple:

User user = session.get(User.class, 2);

Si un enregistrement avec cet ID n'est pas trouvé dans la base de données, la méthode renverra null.

méthode load()

La deuxième méthode pour charger un objet est la méthode load() . Le format général de la méthode load() est le même :

EntityClass Name = session.load(EntityClass.class, Object primaryKey);

Cependant, son comportement est différent de la méthode get() .

Premièrement, cette méthode ne retourne pas un objet réel, mais un proxy : un stub virtuel.

Deuxièmement, lors de l'utilisation de la méthode load() , il n'y a pas de contrôle s'il existe une telle entrée dans la base de données. Au lieu de cela, Hibernate crée immédiatement un objet proxy avec l'ID passé et le renvoie.

Troisièmement, tout le travail avec la base de données se produira lors de l'appel des méthodes de l'objet proxy. Si vous essayez d'appeler, par exemple, la méthode getName() , le premier appel à la base de données se produira. Exemple:

User user = session.load(User.class, new Integer(123));
String name = user.getName(); //this is where the first call to the database will occur

La méthode load() ne doit pas être utilisée pour vérifier la présence d'objets dans la base de données - elle ne le montrera tout simplement pas. De plus, si vous lui transmettez un ID invalide, tel que null, il renverra simplement null.

méthode find()

La méthode find() a été transmise à l' interface Session à partir du standard JPA. Et comme vous le savez, cette norme décrit non seulement la signature des méthodes, mais réglemente également le comportement.

Cette méthode fonctionne exactement comme la méthode get() . Si l'objet n'a pas été trouvé par la clé passée, la méthode renverra simplement null.

User user = session.find(User.class, -2); //method will return null

méthode refresh()

Une autre méthode utile liée au chargement d'un objet à partir d'une base de données est la méthode refresh() .

Vous souvenez-vous de la méthode persist () qui a mis à jour les données dans la base de données en fonction de l'objet passé ? Ainsi, la méthode refresh() fonctionne exactement à l'opposé : elle met à jour un objet existant en fonction des données de la base de données.

Ce comportement est nécessaire si, par exemple, lors de l'écriture d'un objet dans la base de données, diverses procédures stockées y sont appelées pour corriger les données écrites.

Dans de tels cas, il peut être utile de relire l'objet à partir de la base de données s'il y a une chance qu'il ait changé. Exemple:

User user = new User();
user.setName("Kolyan");
session.persist(user);
session.flush();  //Force called SQL INSERT and call triggers

session.refresh(user);
// here we continue to work with the updated object