Dla mnie Kryteria są dość łatwe do zrozumienia i tworzenia zapytań dynamicznych. Ale wadą, którą do tej pory mówię, jest to, że ładuje wszystkie relacje wiele-jeden itp., Ponieważ mamy tylko trzy typy FetchModes, tj. Select, Proxy i Default, i we wszystkich tych przypadkach ładuje wiele-jeden (może się mylę, jeśli tak pomogę odpadam :))
Drugi problem z Criteria polega na tym, że ładuje pełny obiekt, tzn. Jeśli chcę po prostu załadować EmpName pracownika, to nie wymyśli tego instancji, wymyśli kompletny obiekt Employee i mogę uzyskać z niego EmpName z tego powodu, że naprawdę źle działa w raportowanie . gdzie jako HQL po prostu ładuj (nie ładowałem powiązań / relacji), czego chcesz, więc zwiększ wydajność wiele razy.
Jedną z cech Kryteriów jest to, że zabezpieczy cię przed SQL Injection ze względu na jego dynamiczne generowanie zapytań, gdzie tak jak w HQL, ponieważ twoje zapytania są albo stałe, albo sparametryzowane, więc nie są bezpieczne przed SQL Injection.
Również jeśli piszesz HQL w plikach ur aspx.cs, to jesteś ściśle powiązany z ur DAL.
Podsumowując, doszedłem do wniosku, że są miejsca, w których nie można żyć bez raportów typu HQL, więc używaj ich, w przeciwnym razie Kryteria są łatwiejsze do zarządzania.