Mi problema es muy simple, pero no sé cómo hacer Hibernate de la manera que quiero: - tabla MainTable tengo Many-2-One con ParentTable (con 100 filas). punto MainTable a m = 26 filas de 100 filas en ParentTableHibernate genera m + 1 consultas en Many-to-one
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "PARENT_ID")
@Fetch(FetchMode.JOIN)
Cuando simplemente consulta "de MainTable"
que va a generar 26 + 1 consultas
Cuando trazo las consultas, el La primera consulta solo carga PARENT_ID utilizada por 26 consultas posteriores. Supongo que debe tener la forma de cargar todo el PARENT_TABLE en la consulta primero ..
Por favor, ayudar asumiendo que:
- FetchType.EAGER es una NECESIDAD
- Usando de MainTable mt combinación izquierda ir a buscar los padres mt.parent está bien, pero tenemos muchas asociación
Evitar N + 1 selecciona el problema: http://www.realsolve.co.uk/site/tech/hib-tip-pitfall.php?name=n1selects http://stackoverflow.com/questions/97197/what -is-the-n1-select-problem –
@Pangea: Gracias pero aquí algunos comentarios: 1) Usar fetch join es bueno, pero tenemos cerca de diez Parent table. Esa será la última solución 2) Queremos que algo similar a Subselect busque en One-2-Many, de modo que 1 consulta para MainTable, 1 más para la tabla relacionada –
@Fetch (FetchMode.JOIN) y @Fetch (FetchMode.SELECT) no dar ninguna diferencia en absoluto! o_0 –