Удалите броски “удаленный объект, был бы повторно сохранен каскадом”

Этот блог может помочь вам. Хитрость заключается в том, чтобы использовать SpEL (язык выражения весны) для чтения системных свойств, таких как user.home, для чтения домашнего каталога пользователя с использованием SpEL, вы можете использовать выражение
#{ systemProperties['user.home']} внутри элементов вашего компонента. Например, чтобы получить доступ к вашему файлу свойств, хранящемуся в вашем домашнем каталоге, вы можете использовать следующее в вашем PropertyPlaceholderConfigurer, у меня это сработало.

 
    
        file:#{ systemProperties['user.home']}/ur_folder/settings.properties
    

6
задан Brian Tompsett - 汤莱恩 3 July 2015 в 15:08
поделиться

2 ответа

Насколько мне известно, cascade = "all-delete-orphan" принадлежит элементу сопоставления коллекции, а не многие-к-одному . Вы не показали две другие части вашего отображения, поэтому я не могу сказать наверняка, но это возможная (вероятная) проблема.

Я думаю Человек должен выглядеть примерно так:

<!-- other properties -->
<set name="Events" inverse="true" cascade="all-delete-orphan">
    <key column="Person_id" />
    <one-to-many class="PersonEventRegistration" />
</set>

Событие :

<!-- similar mapping for Event -->

PersonEventRegistration :

<!-- other properties -->
<many-to-one name="Person" class="Person" column="PersonId" foreign-key="FK_PersonEvent_PersonId" cascade="delete" <!-- or many ="all" ? --> />

На самом деле вышеупомянутые каскады могут быть конфликтующими (что может быть у вас). На самом деле, мой ответ состоит в двух вещах:

  1. cascade = "all-delete-orphan" не имеет значения для многие-к-одному .
  2. Убедитесь, что вы действительно подумали - через то, как вы работаете со своими объектами и как они должны каскадировать свои операции.
3
ответ дан 17 December 2019 в 07:08
поделиться

Попробуйте отменить ссылки на Person и Event в delete:

    public bool UnregisterFromEvent(Person person, Event entry)
    {
        var registrationEntry = this.session
            .CreateCriteria<PersonEventRegistration>()
            .Add(Restrictions.Eq("Person", person))
            .Add(Restrictions.Eq("Event", entry))
            .Add(Restrictions.Eq("IsComplete", false))
            .UniqueResult<PersonEventRegistration>();

        bool result = false;
        if (null != registrationEntry)
        {
            using (ITransaction tx = this.session.BeginTransaction())
            {
                registrationEntry.Person = null;
                registrationEntry.Event = null;
                this.session.Delete(registrationEntry);
                tx.Commit();
                result = true;
            }
        }
        return result;
    }

Также, я не знал, что можно добавить ограничение на объект, я бы написал это, используя псевдонимы и ID.

            .Add(Restrictions.Eq("Person", person))
            .Add(Restrictions.Eq("Event", entry))
1
ответ дан 17 December 2019 в 07:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: