2009-08-17 15 views

Antwort

2

Es gibt mehrere Möglichkeiten, dies zu erreichen laufen:

Caching
  • aktivieren. Während sich das SQL nicht ändert, vergleicht Hibernate die Ergebnisse aus der Datenbank und verwendet vorhandene Objekte erneut. Dies gibt keinen enormen Schub, ist aber einfach zu implementieren und zu warten.

  • Erstellen Sie eine zweite Zuordnung (gleiche Tabellen, anderes Objekt), um nur eine Teilmenge der Werte zu laden.

  • Verschieben Sie die selten verwendeten Daten in eine zweite Tabelle.

  • Laden Sie Ihre Objekte mit einer benutzerdefinierten nativen SQL-Abfrage. Hier müssen Sie sicherstellen, dass Sie wissen, wie viel geladen wurde und wie Sie die Lücken füllen.

2

Das Hibernate-Referenzdokument enthält ein Kapitel Improving Performance. Sie können sich Ihre Abrufstrategien ansehen, oder ob die Verwendung von Caching die Leistung verbessert.

Um genauer zu sein, müssten Sie mehr Details zu Ihrer Anwendung angeben und wie die über ORM geladenen Objekte verwendet werden.

+0

Normalerweise werden abhängige Objekte geladen, die die ORM-Leistung beeinträchtigen. Sie müssen die Aggressivität Ihrer Abrufrichtlinien festlegen, je nachdem, wie wahrscheinlich es ist, dass Sie eine untergeordnete Eigenschaft benötigen, die einen anderen Abruf auslöst. Ein Personenobjekt, das beispielsweise ein Address-Objekt oder eine Orders-Auflistung abruft. Adresse wird wahrscheinlich benötigt, also lade sie, aber Befehle, vielleicht nicht, also sei weniger aggressiv. –

0

Verwenden Sie in Ihrer Entitätszuordnung FetchType.LAZY. d.h .:

@Entity 
public class MyEntity { 

private List<MyAnotherEntity> values; 

@ManyToOne(fetch = FetchType.LAZY) 
public List<MyAnotherEntity> getValues() { 
return values; 
} 


} 

dann, wenn Sie Einheit mit Kriterien wählen Sie Modus müssen holen, wenn Sie Ihre Sammlung müssen in Objekt abgebildet werden.

Criteria c = createCreteria(entityManager, MyEntity.class); 
c.setFetchMode("values", FetchMode.JOIN); 
Verwandte Themen