NHibernate - CreateCriteria vs CreateAlias
En supposant que le scénario suivant:
class Project{
public Job Job;
}
class Job{
public Name;
}
En supposant que je veux utiliser l'API des Critères de recherche pour tous les projets dont le Travail porte le nom "sumthing".
Je pouvais utiliser le CreateAlias pour créer un alias pour l'Emploi et l'utiliser pour accéder Nom, ou je pourrais créer un nouveau critère pour le bien de l'Emploi et de la recherche par Nom.
Performance sage, est-il une différence?
Vous devez vous connecter pour publier un commentaire.
compte tenu de ces exigences, il n'y aurait pas de différence, le SQL généré est le même:
pour mappages:
et les classes
ces définitions des critères de
générer le SQL
noter cependant que la
CreateAlias
s'appuie sur les mappages de générer des associations alors que laCreateCriteria
appel permet de spécifierJoinType
.donc, ces appels
générer ces instructions SQL
Pour expliquer la différence entre CreateCriteria et CreateAlias dans NHibernate 2.0 + permet de voir le domaine suivant modèle.
Maintenant, si vous écrivez des critères suivants pour jointure interne de ces entités
Les critères ci-dessus ne fonctionnent pas, parce que lors de la première CreateCriteria exécute retour "Catégorie" de l'entité, par conséquent, lors de la deuxième CreateCriteria exécuter il l'habitude de trouver des biens ProductStocks dans la "Catégorie" de l'entité et la requête échoue.
Donc la bonne façon d'écrire ce critère est
Lors de la première CreateAlias exécute retour "Produit" de l'entité, lors de la deuxième CreateCriteria exécuter trouverez propriété ProductStocks dans le "Produit" de l'entité.
Donc le TSQL sera comme ceci.
J'espère que cela aidera.
createAlias() renvoie des critères d'origine comme c'est le résultat
createCriteria() renvoie nouveaux critères construit avec createCriteria
différence sera quand le chaînage de méthodes par exemple
cr.createAlias().ajouter(Restrictions.ilike (le"code","abc")) va ajouter une restriction de l'entité
cr.createCriteria (la"société mère","p").ajouter(Restrictions.ilike (le"code","abc")) va ajouter une restriction à son parent