Использование nHibernate 2.
В нашей системе есть таблица, в которой хранятся записи, которые могут указывать на любую из других таблиц в системе, а также некоторые дополнительные поля.Например,
class PointerTable
{
public int ID;
public string ObjectName;
public int RecordID;
... additional fields
}
Поля ObjectName и RecordID указывают на имя другой таблицы в системе и идентификатор записи в этой таблице, на которую указывает эта запись.Между этой таблицей и другими таблицами в системе нет взаимосвязей.
Мне нужно иметь возможность присоединиться к этой таблице, когда я получаю записи из других таблиц в системе, так как мне нужно определить, является лиТаблица имеет любые записи в PointerTable, которые указывают на нее.то есть получить количество записей в PointerTable для этой записи.
Я пытался сделать это на HQL:
select a.ID, e.Field1, a.Field2, a.Field3,
count(select *
from PointerTable p
where p.ObjectName = "Table1"
and p.RecordID = a.ID)
from Table1 a
where a.ParentTable.ID = :ID
Я также изучил возможность размещения отображения вФайлы конфигурации XML для всех объектов в системе, на которые будет указывать эта таблица.Таким образом, у меня может быть коллекция записей PointerTable в каждой из моих других сущностей.Хотя я не уверен, возможно ли это.Я не могу найти, как настроить отображение на 2 поля, а не на первичный ключ.
Что-то вроде:
<bag name="PointerRecords" table="PointerTable" lazy="true" inverse="true">
<key>
<column name="ThisEntityID" />
<column name="ObjectName" /> ?? Hard coded
</key>
<one-to-many class="PointerTable" not-found="ignore"/>
</bag>
Возможно ли это вообще?
В основном все, что я пытаюсь сделать, это следующий SQL-запрос.Но в идеале мы хотели бы сделать это через HQL или сопоставления.
SQL
select a.ID, e.Field1, a.Field2, a.Field3, Count(d.ID)
from Table1 a
inner join Table2 e on a.ParentID=e.ID
left outer join PointerTable d on d.ObjectName = 'Table1' and d.RecordID = a.ID
where c.ID = @ID
group by a.ID, e.Field1, a.Field2, a.Field3