Для меня Критерии довольно легко понять и делать динамические запросы. Но недостаток, который я до сих пор говорю, заключается в том, что он загружает все отношения многие-один и т. Д., Потому что у нас есть только три типа FetchModes, то есть Select, Proxy и Default, и во всех этих случаях он загружает многие-один (может быть, я ошибаюсь, если это поможет меня нет :))
2-я проблема с критериями заключается в том, что он загружает полный объект, т. Е. Если я хочу просто загрузить EmpName сотрудника, он не придет с этим, он придет с полным объектом Employee, и я могу получить EmpName из-за этого это действительно плохо работает в отчетности . где, поскольку HQL просто загружает (не загружает связи / отношения) то, что вы хотите, так многократно увеличьте производительность.
Одна особенность Criteria заключается в том, что он будет защищать вас от SQL-инъекций из-за своей динамической генерации запросов, где, как и в HQL, поскольку ваши запросы либо фиксированы, либо параметризованы, поэтому не защищены от SQL-инъекции.
Также, если вы пишете HQL в ваших файлах aspx.cs, то вы тесно связаны с вашим DAL.
В целом, я пришел к выводу, что есть места, где вы не можете жить без HQL, как отчеты, так что используйте их иначе, Критериями легче управлять.