【问题标题】:Hibernate can not save/update/remove an objectHibernate 无法保存/更新/删除对象
【发布时间】:2012-09-11 17:21:08
【问题描述】:

我对 Hibernate 有一个很大的问题。 当我尝试更新或保存表中的元素时,出现以下错误:

org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1

当我调用我的 DAO 服务时产生了这个错误:

Session session = sessionFactory.getCurrentSession();
session.saveOrUpdate(object);
session.flush();

当我调试时,在flush()之后会产生错误。

这里是表的键:

@EmbeddedId
@AttributeOverrides( {
        @AttributeOverride(name = "sysDocId", column = @Column(name = "SYS_DOC_ID", nullable = false)),
        @AttributeOverride(name = "sysDataFile", column = @Column(name = "SYS_DATA_FILE", nullable = false)) })
public RelDocFileId getId() {
    return this.id;
}

谢谢大家

【问题讨论】:

    标签: hibernate hibernate3


    【解决方案1】:

    这意味着 Hibernate 在数据库中找不到这条记录,UPDATE 语句返回结果:0 行受到该更新的影响。

    Hibernate 发现您要更新的内容已不存在,这意味着您正在保存过时的数据。

    您不应该允许这种情况,或者适当地处理这个异常,关闭会话并向用户说“嘿,你看到一个过时的数据,它不再存在了”。

    【讨论】:

    • 即使在插入或删除中我也有这个问题
    • 在删除时,情况与我所描述的相同 - 它试图删除并且没有任何内容可删除。在插入时..您是否有级联插入的实体? Hibernate 会使用 saveOrUpdate 来达到这些目的。你还有assigned ID 生成策略吗?如果您自己指定 ID,Hibernate 可能无法识别实体是新实体还是已持久存在。映射以及插入/删除/更新的方式会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 2016-06-30
    相关资源
    最近更新 更多