Пожалуйста, поправьте меня, если я ошибаюсь, но я предполагаю, что в вашем отображении идентификаторов есть что-то грязное. Возможно, это можно сделать так, как ты, а я никогда не видел, это возможно.
Хотя я бы написал свое отображение так:
<class name="Student"> <!-- I omit the table attribute as both your class and table seems to have the same name. -->
<id name="Id">
<generator class="native"/> <!-- Though I would recommend using "identity" if SQL Server's used. -->
</id>
<property name="Name" length="255" not-null="true"/>
<list name="Subjects" not-null="true" table="StudentToSubject">
<key column="studentId" />
<many-to-many column="studentId" class="Subject" />
</list>
</class>
Внутри элемента необязательно указывать атрибуты not-null, unique, type и sql-type, поскольку NHibernate будет определять их во время выполнения, используя рефлексию, хотя я понимаю, что в педагогических целях их лучше писать. Кроме того, если вы хотите, чтобы имя вашего свойства Id в вашем классе объектов совпадало с полем таблицы, вы можете просто пропустить атрибут столбца. Затем NH рассмотрит использование того же имени, что и свойство для поля Id поля таблицы данных.
Что касается вашей коллекции предметов, если вы собираетесь использовать словарь в своем классе Sudent, вам лучше использовать элемент вместо. Однако, если вам нужен список, вам лучше выбрать этот элемент, как я. Все это зависит от ваших потребностей и вашей цели в этом упражнении.
Пожалуйста, учтите, что я взял это сопоставление NH XML прямо из головы, и я не проверял его, поэтому он может содержать ошибки на лету.
В дополнение к этому вы можете взглянуть на это: Глава 6. Составление карт коллекции
Надеюсь, это поможет! =) * * 1016