powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate: неявный полиморфизм и HQL
5 сообщений из 5, страница 1 из 1
NHibernate: неявный полиморфизм и HQL
    #35767568
SergASh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем!

Имеется:
- NHibernate 2.2,
- MSVS 2008 SP1

Хочется выполнить маппинг наследования от интерфейса с использованием стратегии table-per-concrete-class. В коде примерно следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
interface IMember
{
  Account MemberAccount {get; set; }
}
public class Broker : IMember
{
  public long Id {get; set; }
  public Account MemberAccount  {get; set; }
  public string BrokerInfo {get; set; }
}
public class Agent : IMember
{
  public long Id {get; set; }
  public Account MemberAccount {get; set; }
  public string AgentInfo {get; set; }
}
База:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE TABLE [dbo].[tblAccount]
(
  AccountId TYP_ID IDENTITY PRIMARY KEY
-- login/password fields etc.
)
CREATE TABLE [dbo].[tblBroker]
(
  BrokerId TYP_ID IDENTITY PRIMARY KEY
 ,BrokerInfo VARCHAR(max)
 ,CONSTRAINT FK_Broker_Account
    FOREIGN KEY ( AccountId )
      REFERENCES [dbo].[tblAccount] ( AccountId )
)
CREATE TABLE [dbo].[tblAgent]
(
  AgentId TYP_ID IDENTITY PRIMARY KEY
 ,AgentInfo VARCHAR(max)
 ,CONSTRAINT FK_Agent_Account
    FOREIGN KEY ( AccountId )
      REFERENCES [dbo].[tblAccount] ( AccountId )
)
Маппинг:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="Broker" table="tblBroker" lazy="false">
    <id name="Id" column="BrokerId" unsaved-value="0">
      <generator class="identity"/>
    </id>
    <many-to-one name="Account" column="AccountId" class="Account" not-null="true"/>
    <property name="BrokerInfo"/>
  </class>

  <class name="Agent" table="tblAgent" lazy="false">
    <id name="Id" column="AgentId" unsaved-value="0">
      <generator class="identity"/>
    </id>
    <many-to-one name="Account" column="AccountId" class="Account" not-null="true"/>
    <property name="AgentInfo"/>
  </class>
</hibernate-mapping>
Короче говоря, все как в документации сказано (как мне кажется).

А проблема вот в чем. Если я делаю запрос HQL по интерфейсу IMember, то он не выполняется. Вместо этого выдаётся невразумительная ошибка "in expected: data [SELECT data FROM IMember data]".
Код: plaintext
1.
2.
3.
4.
  var hql = @"SELECT data FROM IMember data";
  var query = session.CreateQuery( hql );
  var members = query.List<IMember>();
  Console.WriteLine( "There are {0} members.", members.Count );
Почему полиморфный запрос не срабатывает? Если следовать стратегии table-per-subclass, то есть завести в базе таблицу tblMember и использовать маппинг через <joined-subclass>, то все будет работать при таком же теле HQL-запроса, так что синтаксис в порядке, да и ошибиться тут негде - пять слов всего.

В чём проблема может быть?
...
Рейтинг: 0 / 0
NHibernate: неявный полиморфизм и HQL
    #35769439
Фотография Нахлобуч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMember определен в том же пространстве имен, что и Broker с Agent'ом?
...
Рейтинг: 0 / 0
NHibernate: неявный полиморфизм и HQL
    #35770611
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergASh
Короче говоря, все как в документации сказано (как мне кажется).


http://www.hibernate.org/hib_docs/nhibernate/1.2/reference/en/html/inheritance.html#inheritance-strategies

Код: plaintext
 uid  =  S a

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
NHibernate: неявный полиморфизм и HQL
    #35770780
SergASh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НахлобучIMember определен в том же пространстве имен, что и Broker с Agent'ом?
Да, в том же пространстве имён

Sa , с документацией ознакомился, естественно, прежде чем с вопросами лезть. Но там не сказано распространяется ли для данной стратегии полиморфизм на HQL. Или вы что-то более конкретное имели в виду, чем просто ссылку на доку?
...
Рейтинг: 0 / 0
NHibernate: неявный полиморфизм и HQL
    #35771052
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Или вы что-то более конкретное имели в виду, чем просто ссылку на доку?
я имею в виду использование элемента <any> , который не вижу в ваших мапах и который описан в доке.

Код: plaintext
 uid  = [b] [b]S a
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate: неявный полиморфизм и HQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]