NHibernate и добавление новых элементов с составной коллекцией в дочернюю коллекцию - PullRequest
1 голос
/ 13 июля 2009

У меня есть три класса, которые создают проблему при попытке добавить нового ребенка.

Это:

 User {
        List attributesGroup>
 }

 AttributesGroup {
    attributesGroupId
    value
 }

 AttributesGroupId {
     attrName
     userId
 }

Отображение:

<class name="AlternativeUserAttributes" table="`AlternativeUserAttributes`" lazy="true">
    <composite-id name="Id" class="Data.Entities.AlternativeUserAttributesId">
      <key-property name="AttributeName"  column="`attributeName`" type="string" />
      <key-many-to-one name="User" class="Entities.User" column="`userId`" />
    </composite-id>
    <property name="AttributeValue" column="`attributeValue`" type="string" />
    <many-to-one name="User" column="`userId`" cascade="none" not-null="true" />
  </class>

Я могу удалить элементы и класс SaveUpdate в пользовательском классе без проблем, однако при попытке добавить элемент в коллекцию через:

 AlternativeUserAttributes aua = new AlternativeUserAttributes();
             aua.Id = new AlternativeUserAttributesId();
             aua.Id.AttributeName = name;
            aua.Id.User = curUser;
             aua.AttributeValue = value;
             aua.User = curUser;

        curUser.AlternativeUserAttributes.Add(aua);

Я получаю ошибку о том, что число строк, как ожидается, будет равно 1, но равно нулю, и когда я пытаюсь сохранить только AlternateUserAttributes в качестве самого себя с помощью команды Сохранить, я получаю эту ошибку: Индекс был вне диапазона. Должен быть неотрицательным и меньшим, чем размер коллекции. Имя параметра: индекс

Обе попытки приводят к ВСТАВКЕ для нового Предмета, но я продолжаю получать эти ошибки. Кто-нибудь может помочь?

Ответы [ 2 ]

1 голос
/ 14 июля 2009

Я исправил это, установив unsaved-значение в любое и исключив двунаправленность.

1 голос
/ 13 июля 2009

Мне трудно следовать (ТАК искажено ваше сообщение), но использование составного идентификатора может вызвать эту проблему. Поскольку тип идентификатора «назначен», NHibernate не знает, как определить, является ли объект временным или постоянным.

https://www.hibernate.org/hib_docs/nhibernate/1.2/reference/en/html/example-parentchild.html

Для получения дополнительной информации перейдите к разделу 17.4.

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

Я разместил код здесь: Как сохранить ребенка с назначенным идентификатором в nhibernate

Тем не менее, если вы получаете вставки, то я не уверен на 100%, что это та же проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...