如何在休眠状态下更新组合键

问题描述

| 我有一个包含8列C1,C2,C3,C4,C5,C6,C7,C8的表,其中{C1,C2,C3}的组合是一个组合键。 我只想更新C2的数据,但是当我尝试更新它时,它显示一个异常:
org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1
at org.hibernate.jdbc.BatchingBatcher.checkRowCount(BatchingBatcher.java:93)
at org.hibernate.jdbc.BatchingBatcher.checkRowCounts(BatchingBatcher.java:79)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:195)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:230)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:296)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1007)
是否可以在Hibernate中进行更新? 我正在使用代码-
public  static synchronized Session getSession() {

    Session mysession = (Session) DAO.session.get();
    if (mysession == null||!mysession.isopen()) {
        mysession = sessionFactory.openSession();
        DAO.session.set(mysession);
    }

    return mysession;
}

protected void begin() {
        try{

    getSession().beginTransaction();

        }catch(Exception ex)
        {
            LOGGER.error(ex);
        }
} public void update(Facebook facebookdata){ begin();
        getSession().update(facebookdata);
        commit();
}     

解决方法

        您无法更新主键,因为这是Hibernate在更新对象后用来检索该对象的方法。这就是为什么您会得到过时的异常的原因,因为Hibernate期望对象具有相同的主键。 因此,基本上,您必须将主键更改为其他数字(例如递增数字)或克隆对象以保存它,然后删除旧的不正确的对象。     ,        从您的描述中,我看到您正在尝试更新主键。您能否发布用于进行更新的代码。 另外,您可能想看看这篇文章