¿Qué contiene el objeto proxy Hibernate?


Todo lo que pude obtener de Google es que:

  • Hibernate utiliza un objeto proxy para implementar la carga lenta. Cuando solicitamos cargar el Objeto desde la base de datos, y el Objeto obtenido tiene una referencia a otro objeto concreto, Hibernate devuelve un proxy en lugar del objeto asociado concreto.

  • Hibernate crea un objeto proxy usando instrumentación de bytecode (proporcionada por javassist). Hibernate crea una subclase de nuestra clase entity en tiempo de ejecución utilizando biblioteca de generación de código y reemplaza el objeto real con el proxy recién creado.

Entonces, ¿qué contiene exactamente el objeto Proxy?

¿Contiene un objeto de referencia de objeto esqueleto con solo el campo id establecido? El campo Otros se establecerá cuando llamemos al método get?

El objeto Proxy contiene la instrucción JDBC para obtener todos los datos necesarios para completar el objeto referenciado.

¿Hay algo más que me esté perdiendo?

I no estoy pidiendo la alimentación con cuchara, pero si usted puede proporcionar cualquier enlace con la información que sería genial.

Cualquier corrección a la descripción anterior también será bienvenida.

Ejemplo.

class Address {
   String city;
   String country;
}

class Person{
   int id;
   String name;
   Address address;
}    

Cuando intentamos cargar el objeto Person, Hibernate subclase la clase Person como:

class ProxyPerson extends Person {
       int id;
       String name;
       Address proxyCGLIBObject;
}

Y devuelve un objeto ProxyPerson. Objeto de ProxyPerson tendrá un valor para id y nombre pero proxy para Dirección.

¿Estoy en lo cierto?

¿Qué puedo esperar de agregar un toString () método en el objeto proxy?

Author: Steve Chambers, 2014-08-16

1 answers

Como expliqué en mi libro, High-Performance Java Persistence, el Proxy Hibernate se usa para sustituir una entidad real POJO (Plain Old Java Object).

La clase Proxy se genera en tiempo de ejecución y extiende la clase de entidad original.

Hibernate usa objetos Proxy para entidades es para permitir carga lenta.

Al acceder a propiedades básicas en el Proxy, simplemente delega la llamada a la entidad original.

Cada List, Set, Map el tipo en la clase de entidad se sustituye por un PersistentList, PersistentSet, PersistentMap. Estas clases son responsables de interceptar una llamada a una colección no inicializada.

El Proxy no emite ninguna instrucción SQL. Simplemente activa un InitializeCollectionEvent, que es manejado por el oyente asociado, que sabe qué consulta de inicialización emitir (depende del plan de recuperación configurado).

 37
Author: Vlad Mihalcea,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-06 06:57:18