Я застрял в записи, удалив запись из БД. У меня 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
Я использую org.springframework.orm.hibernate3.HibernateTransactionManager для управления транзакциями. Похоже, мне нужно узнать больше об управлении транзакциями весной. Я расскажу об этом подробнее. Спасибо за вопросы, которые направили меня в правильном направлении. – Tiho
Я пометил метод, который удаляет эту запись как @Transactional (распространение = REQUIRES_NEW), и приложение ведет себя так же, как без этого изменения. – Tiho
@Tiho Вы загружаете объект в том же сеансе, который вы удаляете? Вы должны, потому что таким образом объект получает управление этим сеансом. Вы не можете объединить объект где-нибудь, передать его, а затем просто удалить его. Транзакция была закрыта, и объект был временно (неуправляемым). Короче говоря, перед удалением загрузите объект. У вас есть идентификатор, поэтому это не должно быть сложно. – extraneon