Für mich ist Criteria ein ziemlich leicht zu verstehendes und dynamisches Abfragen. Aber der Fehler, den ich bisher sage, ist, dass es alle Beziehungen mit vielen Einsen usw. lädt, weil wir nur drei Arten von FetchModes haben, nämlich Select, Proxy und Default, und in all diesen Fällen lädt er viele Einsen (möglicherweise irre ich mich, wenn dies hilft mich raus :))
Das zweite Problem mit Criteria ist, dass es ein vollständiges Objekt lädt. Wenn ich also nur EmpName eines Mitarbeiters laden möchte, wird es nicht mit diesem Instant angezeigt. Es wird ein vollständiges Employee-Objekt erstellt, und ich kann EmpName daraus abrufen, da es wirklich schlecht funktioniert Berichterstattung . Wo als HQL nur geladen wurde (Assoziationen / Relationen wurden nicht geladen), was Sie wollen, erhöhen Sie die Leistung um ein Vielfaches.
Ein Merkmal von Criteria ist, dass es Sie aufgrund seiner dynamischen Abfragegenerierung vor SQL Injection schützt, wobei wie in HQL Ihre Abfragen entweder fest oder parametrisiert sind und daher nicht vor SQL Injection sicher sind.
Auch wenn Sie HQL in ur aspx.cs-Dateien schreiben, sind Sie eng mit ur DAL verbunden.
Insgesamt bin ich zu dem Schluss gekommen, dass es Orte gibt, an denen Sie ohne HQL-ähnliche Berichte nicht leben können. Verwenden Sie sie daher, sonst sind die Kriterien einfacher zu verwalten.