(hibernate) таблица изменена после неудачной фиксации - PullRequest
0 голосов
/ 01 августа 2010

Я новичок в спящем режиме. У меня есть транзакция, которая терпит неудачу с HibernateException, но таблица изменяется после фиксации. Вот код:

public StoreResult store(Entry entry)
{
    Session session = HibernateUtility.getSessionFactory().openSession();
    Transaction transaction = session.beginTransaction();

    try
    {           
        String id;

        if (entry.getStatus() == Entry.Status.PUBLISHED)
        {
            id = TitleToURLConverter.convert(entry.getTitle());
        }
        else
        {
            id = "temp_";
        }

        if (entry.getId() == null)
        {
            entry.setId(id);
            session.save(entry);
        }
        else
        {
            session.update(entry);

            session.createQuery("update Entry set id = :newId where id = :oldId")
            .setString("newId", id)
            .setString("oldId", entry.getId())
            .executeUpdate();

            session.refresh(entry);
        }

        transaction.commit();

        return StoreResult.SUCCESS;
    }
    catch (RuntimeException e) 
    {
        transaction.rollback();
        if (e instanceof ConstraintViolationException) return StoreResult.DUPLICATE_ID;

        throw e;
    }
    finally
    {
        session.close();
    }
}

РЕДАКТИРОВАТЬ: InnoDB, по-видимому, не откат транзакции при ошибке дубликата ключа, а только оператор. Я хотел бы, чтобы транзакция всегда откатывалась при ЛЮБОЙ ошибке.

EDIT2: игнорировать это. Я использовал MyIsam.

1 Ответ

1 голос
/ 01 августа 2010

Переключение с MyIsam на InnoDB исправило это.

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