Heim >Java >javaLernprogramm >Wie löst man das N1-Problem in JPA und Hibernate?
Bewältigung des N1-Problems in JPA und Hibernate
Das N1-Problem tritt auf, wenn übermäßig viele Abfragen ausgeführt werden, um relationale Daten abzurufen. Im Ruhezustand ruft beispielsweise eine erste Abfrage N Datensätze ab, und es sind N zusätzliche Abfragen erforderlich, um jeweils zugeordnete Datensätze abzurufen.
Um dieses Problem zu lösen, verwenden Sie JOIN FETCH:
List<PostComment> comments = entityManager.createQuery( "select pc from PostComment pc join fetch pc.post p where pc.review = :review" ) .setParameter("review", review) .getResultList();
Dieser JOIN FETCH ruft die Post-Zuordnung eifrig ab und eliminiert so die N 1 Abfragen.
Wenn mehrere untergeordnete Zuordnungen abgerufen werden müssen, rufen Sie eine Sammlung in der ersten Abfrage und die anderen bei nachfolgenden Abfragen ab.
Automatische Erkennung
Integrationstests sind ideal zur Erkennung des N 1-Problems. Das db-util-Projekt bietet eine automatische JUnit-Assertion, um die erwartete Anzahl der generierten SQL-Anweisungen zu validieren:
@Test public void shouldNotHaveANPlusOneQuery() { // code to configure and execute db-util Assert.assertCountOfSqlStatementsPerformed(1); }
Das obige ist der detaillierte Inhalt vonWie löst man das N1-Problem in JPA und Hibernate?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!