Работа с другими БД / таблицей (доступно при текущем соединении) поддерживается.Дело в том, что ... путь к такой таблице должен исходить из картографирования.
Мы можем использовать либо стандартный отображаемый класс, либо мы можем ввести только динамическое диктовское отображение.Например,
<class entity-name="OtherDBTable" table="[otherDB].[schema].[Table]" ... >
<id name="ID" column="id" type="Int32" />
<property name="PropertyName" column="ColName" type="String" />
...
</class>
JOIN без сопоставленного отношения
Несмотря на заголовок .. о HQL .. неправильное выражение
query.CreateAlias("...
, похоже, принадлежит CreateriaQuery
... который мы будем использовать для присоединения к этой таблице
Итак, давайте создадим стандартный CriteriaQuery
var query = session.CreateCriteria<MyInnerEntity>("rootAlias");
И мы можем присоединить его к другой динамически отображаемой БД / таблице.как это
query.CreateEntityAlias("otherAlias",
Restrictions.EqProperty("rootAlias.OtherId", "otherAlias.ID"),
JoinType.InnerJoin,
"OtherDBTable"
);
и мы можем получить результаты
query.SetProjection(Projections.ProjectionList()
.Add(Projections.Property("rootAlias.ID"))
.Add(Projections.Property("rootAlias.OtherId"))
.Add(Projections.Property("otherAlias.ID"))
.Add(Projections.Property("otherAlias.PropertyName"))
);
и, наконец, мы можем прочитать его как список массивов (или преобразовать его ...)
var list = query.List<object[]>();
JOIN с отображенным отношением
в случае, если наше отображение на другой DB / Table будет содержать отношение (например, многие-к-одному) .. мы могли бы даже использовать стандарт CreateAlias
... но все же... тот факт, что мы пересекли границы текущей БД .. должен исходить из отображения