как обновить составные ключи в спящем режиме - PullRequest
2 голосов
/ 23 июня 2011

У меня есть таблица с 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();

}

Ответы [ 2 ]

2 голосов
/ 08 февраля 2012

Вы не можете обновить первичный ключ, потому что это то, что Hibernate использует для извлечения объекта после его обновления. Вот почему вы получаете устаревшее исключение, так как Hibernate ожидал объект с тем же первичным ключом.

Таким образом, в основном вам придется изменить свой первичный ключ на что-то другое, например, увеличивающий номер, или клонировать объект, сохранить его, а затем удалить старый неправильный объект.

1 голос
/ 23 июня 2011

Из вашего описания я вижу, что вы пытаетесь обновить первичный ключ.Не могли бы вы опубликовать код, который вы используете для обновления.

Кроме того, вы можете взглянуть на это сообщение

...