Nhibernate 如何为普通SQL查询中的联接表定义表别名?

Nhibernate 如何为普通SQL查询中的联接表定义表别名?,nhibernate,native-sql,Nhibernate,Native Sql,我有一个用元素映射的实体,如下所示: <class name="Entity" table="Entites"> <id name="Id"> <generator class="guid" /> </id> <property name="SomeProperty" /> <join table="EntityData" optional="true"> <key column="en

我有一个用
元素映射的实体,如下所示:

<class name="Entity" table="Entites">
  <id name="Id">
    <generator class="guid" />
  </id>
  <property name="SomeProperty" />
  <join table="EntityData" optional="true">
    <key column="entity_id" />
    <property name="SomeDataProperty />
  </join>
</class>
但这不起作用,因为NHibernate使用错误的别名(“entity_1_”)注入连接属性

我还尝试将表别名指定为“{data}”,但是NHibernate没有替换它(在普通SQL中仍然包含花括号)

将联接结果添加到查询(
query.AddJoin(“data”,“entity.EntityData”)
)也不起作用。我已经对此进行了调试,NHibernate会忽略它,因为它会在某些时候检查属性是否为集合或实体(但它是一个组件,因此if条件都不为true)

一种解决方法是像NHibernate生成连接别名那样指定连接别名(在我的例子中是“entity_1_”),然后一切正常

有人知道如何正确解决这个问题吗


编辑:我现在在查询使用继承映射映射的实体时遇到了相同的问题。我可以为基本实体定义一个别名,但是继承的实体被命名为实体1、实体2等等。

这似乎是不可能的,所以我现在为它创建了一个功能请求:

你真的需要sqlquery吗?您也可以在where和select子句中插入sql,而不会丢失大多数自动连接部分是的,我需要纯sql,因为出于性能原因,我正在做一些NHibernate不支持的事情(特殊的Oracle语法,如“WITH…select”、联合和从关联表连接而不连接主表)。
var query = session.CreateSQLQuery(
  "select {entity.*} from Entities {entity}" +
  "left outer join EntityData data on {entity}.Id = data.entity_id"
);
query.AddEntity("entity", typeof(Entity));