我对NHibernate有一个非常愚蠢的怀疑。有两个或三个实体,其中两个相关,一个与其他两个实体无关。我必须通过加入它们从这三个表中获取一些选定的列。使用session.CreateSql()或者我们必须使用session.CreateCriteria()是个好主意。我真的很困惑,因为我无法在这里编写Criteria查询并强制使用CreateSql。请指教。
答案 0 :(得分:0)
一般情况下,应尽可能避免编写SQL;
使用ORM的一个优点是它与实现无关
这意味着您不知道(并且不关心)底层数据库是什么,并且您可以非常轻松地切换数据库提供程序或使用数据库结构进行调整。
如果您编写自己的SQL语句,则存在不在其他提供程序上工作的风险,并且您还必须自己维护它们(例如,如果您将Id属性的基础列的名称从“Id”更改为“ Employee_Id',你必须改变你的SQL查询,而使用Criteria则不需要改变)。
话虽如此 - 没有什么可以阻止你编写从多个表中提取数据的Criteria / HQL。例如(使用HQL):
select emp.Id, dep.Name, po.Id
from Employee emp, Department dep, Posts po
where emp.Name like 'snake' //etc...
答案 1 :(得分:0)
有多种方法可以使用NH进行查询。
我建议使用HQL或LINQ进行常规查询,使用QueryOver(resp.Friteria)进行动态查询,只有在没有任何其他方式时才使用SQL。
要回答您不知道的具体问题:如果面向对象模型中提供了查询所需的所有信息,您应该能够通过使用 HQL