Извлечение только объектов базового типа в nHibernate - PullRequest
1 голос
/ 14 марта 2009

Я сейчас пытаюсь решить проблему. У меня есть наследование таблиц классов aka table-er-subclass (одна основная таблица + несколько других с дополнительными данными). В моем приложении могут существовать как экземпляры базовых, так и расширенных объектов. Теперь я хочу иметь возможность иногда получать только те базовые объекты, а иногда и оба типа. Простой пример (оба класса сопоставлены со всеми своими свойствами)

public class Base 
{
  public in ID {get; set;}
  public string Something {get; set;}
}

public class Extended : Base 
{
  public bool NewProp{get; set;}
}

теперь выполняющий hql-запрос "из базы" будет извлекать как базовые, так и внешние объекты. Есть ли способ ограничить такое поведение, чтобы получать только базовые объекты?

Ответы [ 2 ]

2 голосов
/ 14 марта 2009

с HQL вы сможете использовать специальное свойство "class":

from Base b where b.class=Base

другой подход может заключаться в использовании простого SQL, когда вы лучше контролируете то, что вы получаете.

В любом случае, проверьте (N) документы Hibernate.

0 голосов
/ 14 марта 2009

Это отображение для вышеупомянутого образца (если есть какая-то ошибка, простите меня, это должна быть опечатка, потому что образец работает)

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping auto-import="true"
                   default-lazy="false"
                   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xmlns="urn:nhibernate-mapping-2.2">
  <class name="Base, Test"
         table="base">
    <id name="ID"
        access="property"
        column="ID"
        type="Int64"
        unsaved-value="0">
      <generator class="sequence">
        <param name="sequence">base_id_seq</param>
      </generator>
    </id>
    <property name="Something"
              access="property"
              type="String">
      <column name="somethin"/>
      <joined-subclass name="Extended, Test"
                       table="extended"
                       schema="extended">
        <key column="id" />
        <property name="NewProp"
                  access="property"
                  type="Boolean">
          <column name="newProp"/>
        </property>
      </joined-subclass>
    </class>
</hibernate-mapping>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...