【问题标题】:Spring and Hibernate: can't delete entrySpring和Hibernate:无法删除条目
【发布时间】:2010-08-18 12:53:30
【问题描述】:

我坚持使用从数据库中删除条目的条目。我将 Hibenrnate 与 spring 集成在一起。 RDMS 是 HyperSql,应用服务器是

Tomcat 6. 对于依赖管理,我使用 maven,对于开发,我使用带有 maven 插件的 Eclipse。

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

我的问题如下。首先,我使用合并将条目存储到数据库中。此条目是用户注册请求。条目存储到数据库后,我向该新用户发送电子邮件。此电子邮件包含确认链接。这用于验证他/她在提出注册请求时输入的用户电子邮件地址。用户转到我在电子邮件中发送的链接后,会要求用户提供凭据,如果凭据正常,则确认注册请求并应从数据库中删除。我试图简单地使用 delete(Object) 方法删除这个条目。一切似乎都很好,直到我尝试访问我刚才删除的相同请求。此条目实际上并未被删除,并且在日志中我找到了下一条消息:

在删除处理中处理瞬态实体。

我试图刷新会话并清除它,但它没有做任何好事。

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

任何帮助将不胜感激。

最好的问候, 蒂霍

【问题讨论】:

    标签: java hibernate spring orm


    【解决方案1】:

    您是否在删除的同一会话中加载对象?

    您应该这样做,因为这样对象就可以由该会话管理。你不能在某处合并对象,传递它,然后直接删除它。 事务已关闭,然后对象是瞬态的(非托管的)。简而言之,就在您删除之前,加载对象。你有身份证,应该不难。

    编辑

    将带有有效答案的评论移至问题中。

    【讨论】:

    • 我使用 org.springframework.orm.hibernate3.HibernateTransactionManager 进行事务管理。看来我需要在春季学习更多有关事务管理的知识。我会阅读更多关于此的内容。感谢以正确方式指导我的问题。
    • 我将删除此条目的方法标记为 @Transactional(propagation=REQUIRES_NEW) 并且应用程序的行为与没有此更改时相同。
    • @Tiho 您是否在删除的同一会话中加载对象?您应该这样做,因为这样对象就可以由该会话管理。你不能在某处合并对象,传递它,然后直接删除它。事务已关闭,然后对象是瞬态的(非托管的)。简而言之,就在您删除之前,加载对象。你有身份证,所以应该不难。
    • 非常感谢。这是一个很棒的提议,而且很有效。再次感谢!你帮了很多忙。
    • @Tiho 我很高兴我能很好地解释我认为错的地方。不是那么容易说出来的:)我将用我评论中的文字更新答案,所以其他人也可以享受它。
    猜你喜欢
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 2011-07-17
    相关资源
    最近更新 更多