Heim >Java >javaLernprogramm >Wie löst man das N1-Problem in JPA und Hibernate?

Wie löst man das N1-Problem in JPA und Hibernate?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-14 18:54:02749Durchsuche

How to Solve the N 1 Problem in JPA and 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn