2009-06-26 6 views
1

J'ai cette requête:Alias ​​de table jointe à SQLProjection

criteria = session.CreateCriteria(typeof (Building)) 
    .CreateAlias("Estate", "estate") 
    .SetProjection(Projections.ProjectionList() 
         .Add(Property.ForName("Name"), "BuildingName") 
         .Add(Property.ForName("estate.Name"), "EstateName") 
         .Add(Projections.SqlProjection(
           "(estate1_.BBRMunicipalityNumber + '-' + estate1_.BBREstateNumber + '-' + {alias}.BBRBuildingNumber)" + " as BBRNumber", 
           new[] { "BBRNumber" }, 
           new[] { NHibernateUtil.String }), 
          "BBRNumber")) 

Est-il possible que je peux obtenir l'alias SQL pour « immobilier » comme l'écriture {} succession dans la chaîne SQL? {estate} ne fonctionne pas. Maintenant, j'ai fini par coder en dur l'alias dans la chaîne SQL, mais cela ne semble pas très solide. Si je comprends bien les documents, cela devrait être possible. J'utilise NH2.0.1.

/Asger

Répondre

1

Pas une réponse directe à votre question, mais: Pourquoi ne pas interroger les trois valeurs séparément et faire la concaténation dans votre code au lieu d'utiliser la base de données pour cela?

Pour répondre à votre question: Dans Hibernate v3 (java, désolé) il y a a getColumnAlias méthode sur l'interface de projection. Je ne suis pas capable de trouver son homologue dans NHibernate.

Vive

+0

Salut Maarten, merci beaucoup pour votre réponse. Le getColumnAlias ​​est exactement ce que je cherche ... mais comme vous le dites, il ne semble pas exister dans NH. Mais pour ce qui est de votre suggestion, vous avez raison, j'ai saisi la partie de la requête d'une autre partie de mon code, où je vais utiliser une clause HAVING sur la valeur projetée, donc ça a du sens - mais dans ce cas ce n'est pas le cas. Merci d'avoir fait remarquer cela! – asgerhallas

1

Vous pouvez utiliser {alias} - il fera référence à l'alias de la projection en cours.

Questions connexes