2010-08-18 7 views
0

Я застрял в записи, удалив запись из БД. У меня Hibenrnate интегрирован с весной. RDMS - это HyperSql, а сервер приложений -Весна и спящий режим: не удается удалить запись

Tomcat 6. Для управления зависимостью я использую maven и для разработки я использую Eclipse с подключаемым модулем maven.

Hibernate is in version: 3.3.2.GA 
Spring is in version: 3.0.3.RELEASE 
HyperSql is in version: 2.0.0 

Моя проблема заключается в следующем. Во-первых, я храню запись в базу данных с помощью слияния. Эта запись является запросом на регистрацию пользователя. После ввода данных в db я отправляю электронное письмо этому новому пользователю. Это письмо содержит ссылку для подтверждения. Это используется для подтверждения адреса электронной почты пользователей, которые он ввел, и делает запрос на регистрацию. После того, как пользователь перейдет на ссылку, которую я отправил по электронной почте, пользователю задают учетные данные, и если учетные данные в порядке, запрос на регистрацию подтверждается и должен быть удален из базы данных. Я пытаюсь удалить эту запись, просто используя метод delete (Object). Кажется, все в порядке, пока я не попытаюсь получить доступ к тому же запросу, который я удалил несколько мгновений назад. Эта запись на самом деле не удалена, и в журнале я нахожу следующее сообщение:

обработка переходного объекта в обработке удаления.

Я попытался выполнить сеанс и очистить его, но ничего хорошего не сделал.

Session factory is: org.springframework.orm.hibernate3.LocalSessionFactoryBean 

Любая помощь будет оценена по достоинству.

С наилучшими пожеланиями, Tiho

ответ

3

ли вы загрузить объект в том же сеансе вы удалили?

Вы должны, потому что таким образом объект получает управление этим сеансом. Вы не можете объединить объект где-нибудь, передать его, а затем просто удалить его. Сделка была закрыта, и объект затем является временным (неуправляемым). Короче говоря, перед удалением загрузите объект. У вас есть идентификатор, поэтому это не должно быть сложно.

EDIT

покрутил комментарий с рабочим ответ в вопрос.

+0

Я использую org.springframework.orm.hibernate3.HibernateTransactionManager для управления транзакциями. Похоже, мне нужно узнать больше об управлении транзакциями весной. Я расскажу об этом подробнее. Спасибо за вопросы, которые направили меня в правильном направлении. – Tiho

+0

Я пометил метод, который удаляет эту запись как @Transactional (распространение = REQUIRES_NEW), и приложение ведет себя так же, как без этого изменения. – Tiho

+0

@Tiho Вы загружаете объект в том же сеансе, который вы удаляете? Вы должны, потому что таким образом объект получает управление этим сеансом. Вы не можете объединить объект где-нибудь, передать его, а затем просто удалить его. Транзакция была закрыта, и объект был временно (неуправляемым). Короче говоря, перед удалением загрузите объект. У вас есть идентификатор, поэтому это не должно быть сложно. – extraneon

Смежные вопросы