Algo de Hibernate básico: get() y load()

 Sigo jugando/leyendo Hibernate y algo básico que me ha llamado un poco la atención. En Hibernate para obtener un objeto de la base de datos por medio de su clave primaria tenemos dos métodos: get() y load()

get() se añadió posteriormente a load() y su uso es muy tonto. Le pasamos el id y carga el objeto de base de datos. Devuelve null si no lo encuentra.

load() es anterior y tiene un comportamiento un tanto peculiar. Si no encuentra el objeto en base de datos, salta una excepción. Si lo encuentra, no lo carga, sino que te devuelve un proxy del objeto. La carga real se hace cuando intentamos obtener datos de ese proxy, por lo que incluso pueden saltarnos excepciones después, cuando estemos usando los métodos get del proxy, ya que es cuando se intentará realmente la carga del objeto de la base de datos.

¿Cuando usar uno u otro?. A criterio del consumidor, pero una posibilidad (y es sólo una idea) es usar get() cuando la no existencia de un objeto en base de datos con un id determinado pueda ser una cosa normal, por ejemplo, una base de datos de empleados de una empresa y usamos el DNI como clave primaria. Un usuario de nuestra aplicación introduce un DNI y se equivoca al hacerlo o simplemente pone un DNI de alguien que no es de la empresa.

Se usaría load() cuando la no existencia de un objeto con un id determinado puede considerarse un error, por ejemplo, usar como id una columna específica de la base de datos que no tiene ningún sentido en nuestro modelo de datos. Ese id se ha tenido que obtener de base de datos y si ya no existe, es porque alguien ha borrado o se ha sacado el id de la manga. O no existe el id del usuario de administración de nuestra aplicación, o el número de versión de la aplicación, o cualquier otro dato que nuestra aplicación requiera inexcusablemente en base de datos.

 

Esta entrada ha sido publicada en Hibernate y etiquetada como . Guarda el enlace permanente.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.