En Hibernate cuando recuperar una entidad a través de una carga, si accede a que descriptor de acceso Identificación de la entidad que no inicializa el proxy:¿Cuándo recupera el ID de un proxy de Hibernate inicializar el proxy?
Property myProp = (Property) session.load(Property.class, myId);
myProp.getId(); // Doesn't load the proxy
myProp.getDescription(); // Loads the proxy from the database hit
Sin embargo, no tengo muy claro cuáles son las reglas de representación de la asociación de carga. Tenía la impresión de que cuando recuperas una entidad a través de una consulta HQL o Criteria se aplican las mismas reglas.
Cada Property
en mi código tiene un Company
. El Company
se declara como tal:
@ManyToOne(fetch = FetchType.LAZY, optional=false)
@JoinColumn(name = "company_id", nullable=false)
private Company company;
Sin embargo, en mi código que estoy actualmente recibiendo N + 1 le permite elegir cuando se repite a través de la Properties
porque el Company
se carga cuando llamo Company.getId()
.
En el objeto Company
y Property
, el campo de id es un Long anotado con @Id
.
¿Hay alguna otra consideración que me falta para evitar la carga de la entidad Company
?
La respuesta es un gran comienzo, pero el primer comentario es la mejor respuesta. Asegúrate de leer el enlace que publicó Gennady Shumakher. Además, si alguien tiene curiosidad, hay un error en la base de datos de Hibernate sobre este problema que encontré: http://opensource.atlassian.com/projects/hibernate/browse/HHH-3718 – jbarz