Mein Problem ist sehr einfach, aber ich weiß nicht, wie Hibernate macht, wie ich will: - Tabelle MainTable haben Many-2-One mit ParentTable (mit 100 Reihen). MainTable Punkt m = 26 Zeilen von 100 Zeilen in ParentHibernate generieren m + 1 Abfragen in Many-to-One
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "PARENT_ID")
@Fetch(FetchMode.JOIN)
Wenn ich einfach abfragen "von MainTable"
wird es generieren 26 + 1 abfragt
Wenn ich die Abfragen verfolgen, die Die erste Abfrage lädt nur PARENT_ID, die von 26 späteren Abfragen verwendet wird. Ich denke, es sollte die Art und Weise haben die ganze PARENT_TABLE in der ersten Abfrage zu laden ..
Bitte helfen Sie durch die Annahme:
- FetchType.EAGER ist ein Muss
- Mit von MainTable mt LEFT JOIN holen mt.parent Eltern in Ordnung ist, aber wir haben viele Verein
Das Vermeiden von N + 1 wählt das Problem aus: http://www.realsolve.co.uk/site/tech/hib-tip-pitfall.php?name=n1selects http://stackoverflow.com/questions/97197/what -is-das-n1-wählt-Problem –
@Pangea: Danke, aber hier ein paar Kommentare: 1) Verwenden Sie Fetch Join ist gut, aber wir haben etwa zehn Elterntabelle. Das wird die letzte Lösung sein 2) Wir wollen etwas ähnliches wie Subselect holen in One-2-Many, so dass 1 Abfrage für MainTable, 1 mehr für verwandte Tabelle –
@ Fetch (FetchMode.JOIN) und @ Fetch (FetchMode.SELECT) gib überhaupt keinen Unterschied !!! o_0 –