La principal diferencia es si se retrasa la carga.
El método de carga no accede a la base de datos de inmediato, y cuando el registro intentó cargar no existe, el método de carga devuelve un objeto proxy no inicializado.
Obtener método
Siempre acceda a la base de datos de inmediato. Cuando el registro intentó cargar no existe, devuelve nulo directamente
Hay dos métodos que se encuentran en Hibernate que son muy similares. Después de revisarlo, encontré
Hay dos métodos muy similares en Hibernate, Get () y Load (). Ambos pueden leer datos de la base de datos a través de la clase de entidad especificada e ID y devolver la instancia correspondiente. Sin embargo, Hibernate no hará dos exactamente los mismos métodos. La diferencia entre ellos es:
Obtener es consultar la base de datos directamente. Si no se puede encontrar, devolverá nulo. La carga se cargará primero desde la memoria. Si no se ha cargado o consultado antes, entonces consulte la base de datos.
La diferencia fundamental entre el método GET y el método de carga en Hibernate es que si usa el método de carga, Hibernate cree que el objeto (registro de la base de datos) correspondiente a la ID debe existir en la base de datos, por lo que puede usarse con confianza, y puede usar el proxy para retrasar la carga del objeto. La base de datos solo se consulta cuando se usan otros datos de atributos en el objeto, pero si el registro no existe en la base de datos, no hay forma, y solo puede lanzar excepciones. El método de carga arroja excepciones significa que cuando se usa los datos del objeto, las excepciones se arrojan cuando los datos no existen en la base de datos, en lugar de cuando se crea este objeto. Dado que el caché en la sesión es un recurso muy barato para Hibernate, al cargar, primero verificaremos el caché de la sesión para ver si el objeto correspondiente a la ID existe. Si no existe, se creará un proxy. Entonces, si sabe que la ID debe tener un registro correspondiente en la base de datos, puede usar el método de carga para lograr una carga perezosa. Para el método GET, Hibernate confirmará si los datos correspondientes a la ID existe. Primero, busque en el caché de la sesión y luego busque en el caché secundario. Si aún no se ha hecho, busque la base de datos, y si no se ha realizado en la base de datos, devuelva nulo.
2. El método Get primero consulta el caché de la sesión, si no, consulta el caché secundario y finalmente consulta la base de datos; Por el contrario, cuando se crea el método de carga, el caché de la sesión es primero consulta, y si no se crea un agente, el caché y la base de datos secundario solo se consultan cuando los datos realmente se usan.
En resumen, para la diferencia fundamental entre Get and Load, en una palabra, Hibernate cree que los datos deben existir en el método de base de datos para la carga, y pueden usar el proxy para retrasar la carga con confianza. Si se encuentra un problema durante el uso, solo puede arrojar excepciones; Para el método GET, Hibernate debe obtener los datos reales, de lo contrario devolverá NULL.
1. Si no se encuentra ningún registro que cumpla con los criterios, el método get () devolverá nulo. Y load () informará un ObjectNotFoundecception.
2. El método Load () puede devolver la instancia de clase proxy de una entidad, mientras que Get () siempre devolverá solo la clase de entidad.
3. El método Load () puede hacer uso completo de los datos existentes en el caché secundario y el caché interno, mientras que el método get () solo busca en el caché interno. Si no se encuentran datos correspondientes, se omitirá el caché secundario y se llamará directamente a SQL para completar la búsqueda.