obtener () método

Si desea obtener un objeto por su ID (o clave principal), Hibernate tiene tres métodos para esto:

  • carga()
  • conseguir()
  • encontrar()

Hacen lo mismo, pero hay matices. El formato general del método get() es:

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

El método get() toma como segundo parámetro el ID (Primary Key) del objeto que necesita devolver. Luego carga ese objeto de la base de datos y lo devuelve. Ejemplo:

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

Si no se encuentra un registro con este ID en la base de datos, el método devolverá un valor nulo.

método de carga ()

El segundo método para cargar un objeto es el método load() . El formato general del método load() es el mismo:

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

Sin embargo, su comportamiento es diferente del método get() .

Primero, este método no devuelve un objeto real, sino un proxy: un stub virtual.

En segundo lugar, cuando se usa el método load() , no se verifica si existe tal entrada en la base de datos. En cambio, Hibernate crea inmediatamente un objeto proxy con la ID pasada y lo devuelve.

En tercer lugar, todo el trabajo con la base de datos ocurrirá al llamar a los métodos del objeto proxy. Si intenta llamar, por ejemplo, al método getName() , se producirá la primera llamada a la base de datos. Ejemplo:

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

El método load() no debe usarse para verificar la presencia de objetos en la base de datos; simplemente no lo mostrará. Además, si le pasa un ID no válido, como nulo, simplemente devolverá nulo.

método buscar()

El método find() se pasó a la interfaz de sesión desde el estándar JPA. Y como saben, este estándar describe no solo la firma de los métodos, sino que también regula el comportamiento.

Este método funciona exactamente como el método get() . Si la clave pasada no encontró el objeto, entonces el método simplemente devolverá un valor nulo.

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

método actualizar ()

Otro método útil que tiene que ver con cargar un objeto desde una base de datos es el método refresh() .

¿Recuerda el método persist() que actualizó los datos en la base de datos en función del objeto pasado? Por lo tanto, el método refresh() funciona exactamente al revés: actualiza un objeto existente en función de los datos de la base de datos.

Este comportamiento es necesario si, por ejemplo, al escribir un objeto en la base de datos, se llaman allí varios procedimientos almacenados que corrigen los datos escritos.

En tales casos, puede ser útil volver a leer el objeto de la base de datos si existe la posibilidad de que haya cambiado. Ejemplo:

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