DataAccessException не работает - PullRequest
1 голос
/ 08 января 2011

Я установил в моем applicationContext

    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

, и я пытаюсь поймать исключение DataAccessException в ManagedBean.У меня есть BusinessDelegate, где я устанавливаю @ Transactonal.

Проблема в том, что

    try
    {
        operazioneOk = businessDelegate.insertAuto(newAuto);
    }
    catch (DataAccessException e)
    {
        System.out.println("autoBean");
    }

улов, работа, даже если я не установил
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

но странно то, что в консоли у меня есть это исключение:

AVVERTENZA: SQL Error: 0, SQLState: null
GRAVE: L'operazione «batch» 0 insert into public.auto (marca, modello, anno, km, cilindrata, optional, prezzo, occasione, id) values (w, ww, w, w, w, w, w, 0, 12) è stata interrotta. Chiamare «getNextException» per scoprirne il motivo.
AVVERTENZA: SQL Error: 0, SQLState: 23505
GRAVE: ERROR: duplicate key value violates unique constraint "auto_marca_key"
  Dettaglio: Key (marca)=(w) already exists.
GRAVE: Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update

В обоих случаях.Я думаю, что что-то не работает.Помоги мне!

Ответы [ 2 ]

2 голосов
/ 08 января 2011

ошибка от трассировки стека

duplicate key value violates unique constraint "auto_marca_key"
  Dettaglio: Key (marca)=(w) already exists.

вы вставляете строку, содержащую значение столбца, которое нарушает уникальное ограничение.

0 голосов
/ 08 января 2011

Хорошо, я сам решил проблему.

Решением является установка распространения @Transactional.Это метод в моем BusinessDelegate (SessionFacade):

@Override
@Transactional
public boolean insertAuto(Auto auto)
{
    try
    {
        return (autoDao.create(auto) != null);
    }
    catch (DataAccessException e)
    {
        System.out.println("aa");
    }
    return false;
}

в то время как в DAO я должен установить:

@Override
@Transactional(propagation = Propagation.REQUIRES_NEW)
public PK create(T istance) throws DataAccessException
{
    return (PK) sessionFactory.getCurrentSession().save(istance);
}

теперь все работает нормальноЕсли кто-то видит какие-либо проблемы в этом подходе, пожалуйста, посоветуйте мне.

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