Hibernate - Пакетное обновление вернуло неожиданное количество строк из обновления: 0 фактическое количество строк: 0 ожидается: 1 - PullRequest
119 голосов
/ 30 апреля 2010

Я получаю следующее сообщение об ошибке гибернации. Я могу определить функцию, которая вызывает проблему. К сожалению, в этой функции есть несколько вызовов БД. Я не могу найти строку, которая вызывает проблему, поскольку hibernate завершает сеанс в конце транзакции. Приведенная ниже ошибка гибернации выглядит как общая ошибка. Это даже не упомянуло, какой Бин вызывает проблему. Кто-нибудь знаком с этой ошибкой гибернации?

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:235)
        at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:142)
        at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:297)
        at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
        at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:985)
        at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:333)
        at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
        at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:584)
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransacti
onManager.java:500)
        at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManag
er.java:473)
        at org.springframework.transaction.interceptor.TransactionAspectSupport.doCommitTransactionAfterReturning(Transaction
AspectSupport.java:267)
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:170)
        at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:176)

Ответы [ 30 ]

3 голосов
/ 31 августа 2017

Это также может произойти при попытке UPDATE a ПЕРВИЧНЫЙ КЛЮЧ .

3 голосов
/ 30 апреля 2014

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

2 голосов
/ 19 октября 2018

Еще один способ получить эту ошибку, если у вас есть нулевой элемент в коллекции.

2 голосов
/ 17 февраля 2015

Это тоже случилось со мной, потому что у меня был идентификатор как Long, и я получал из представления значение 0, и когда я попытался сохранить в базе данных, я получил эту ошибку, затем я исправил ее, установив идентификатор в ноль.

2 голосов
/ 17 октября 2013

это происходит, когда вы пытаетесь удалить тот же объект, а затем снова обновить тот же объект, используйте это после удаления

session.clear ();

1 голос
/ 17 июля 2016

Я тоже сталкивался с такой же проблемой. В моем случае я обновлял объект, который даже не существовал, используя hibernateTemplate.

На самом деле в моем приложении я получал объект БД для обновления. И, обновляя его значения, я также по ошибке обновил его идентификатор, продолжил его обновление и столкнулся с упомянутой ошибкой.

Я использую hibernateTemplate для операций CRUD.

1 голос
/ 31 июля 2015

Это происходит, когда вы объявили управляемый компонент JSF как

@RequestScoped;

, когда вы должны объявить как

@SessionScoped;

С уважением;

1 голос
/ 06 октября 2014

Я столкнулся с этой проблемой, когда вручную начинал и совершал транзакции внутри метода, помеченного как @Transactional. Я исправил проблему, обнаружив, существует ли активная транзакция.

//Detect underlying transaction
if (session.getTransaction() != null && session.getTransaction().isActive()) {
    myTransaction = session.getTransaction();
    preExistingTransaction = true;
} else {
    myTransaction = session.beginTransaction();
}

Затем я позволил Spring обработать транзакцию.

private void finishTransaction() {
    if (!preExistingTransaction) {
        try {
            tx.commit();
        } catch (HibernateException he) {
            if (tx != null) {
                tx.rollback();
            }
            log.error(he);
        } finally {
            if (newSessionOpened) {
                SessionFactoryUtils.closeSession(session);
                newSessionOpened = false;
                maxResults = 0;
            }
        }
    }
}
1 голос
/ 12 мая 2016

Я получил эту ошибку, когда попытался обновить объект с идентификатором, который не существует в базе данных. Причиной моей ошибки было то, что я вручную назначил свойство с именем 'id' для JSON-представления объекта на стороне клиента, а затем при десериализации объекта на стороне сервера это свойство 'id' перезаписало бы переменную экземпляра ( также называемый «id»), который должен был генерировать Hibernate. Поэтому будьте осторожны с именами коллизий, если вы используете Hibernate для генерации идентификаторов.

0 голосов
/ 02 марта 2018

На самом деле, это случилось со мной, когда я не сохранил объект в качестве ссылочной переменной. в классе сущности. Понравился этот код: ses.get(InsurancePolicy.class, 101); После этого я сохранил объект в ссылочной переменной сущности, поэтому проблема для меня решена. policy=(InsurancePolicy)ses.get(InsurancePolicy.class, 101); После этого я обновил объект, и он работал нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...