I have a very silly doubt in NHibernate. There are two or three entities of which two are related and one is not related to other two entities. I have to fetch some selected columns from these three tables by joining them. Is it a good idea to use session.CreateSql() or we have to use session.CreateCriteria(). I am really confused here as I could not write the Criteria queries here and forced to use CreateSql. Please advise.
Share
in general you should avoid writing SQL whenever possible;
one of the advantages of using an ORM is that it’s implementation-agnostic.
that means that you don’t know (and don’t care) what the underlying database is, and you can actually switch DB providers or tweak with the DB structure very easily.
If you write your own SQL statements you run the risk of them not working on other providers, and also you have to maintain them yourself (for example- if you change the name of the underlying column for the Id property from ‘Id’ to ‘Employee_Id’, you’d have to change your SQL query, whereas with Criteria no change would be necessary).
Having said that- there’s nothing stopping you from writing a Criteria / HQL that pulls data from more than one table. for example (with HQL):