Pour moi, les critères sont assez faciles à comprendre et à effectuer des requêtes dynamiques. Mais le défaut que je dis jusqu'à présent est qu'il charge toutes les relations multiples, etc. car nous n'avons que trois types de FetchModes, c'est-à-dire Select, Proxy et Default et dans tous ces cas, il charge plusieurs (je peux me tromper si l'aide moi :))
Le deuxième problème avec les critères est qu'il charge un objet complet, c'est-à-dire que si je veux simplement charger EmpName d'un employé, il ne fournira pas cet objet, il proposera un objet employé complet et je peux obtenir EmpName à cause de cela, cela fonctionne vraiment mal dans rapports . où en tant que HQL, il suffit de charger (ne charge pas l'association / les relations) ce que vous voulez, donc augmentez les performances plusieurs fois.
Une caractéristique de Criteria est qu'il protégera u de SQL Injection en raison de sa génération de requêtes dynamiques où, comme dans HQL, vos requêtes sont soit fixes, soit paramétrées et ne sont donc pas à l'abri de SQL Injection.
De plus, si vous écrivez HQL dans vos fichiers aspx.cs, vous êtes étroitement couplé avec ur DAL.
Dans l'ensemble, ma conclusion est qu'il y a des endroits où vous ne pouvez pas vivre sans rapports HQL, alors utilisez-les autrement. Les critères sont plus faciles à gérer.