Управление откатом Jboss после исключения Hibernate - PullRequest
0 голосов
/ 11 июня 2009

HI All,

Я пытаюсь сохранить имя, адрес, информацию электронной почты, используя Hibernate ... иногда в Hibernate возникает исключение, которое заставляет JBoss откатить всю транзакцию! Я не хочу, чтобы это происходило, если при сохранении электронной почты возникает исключение Hibernate ... тогда я просто хочу, чтобы бит электронной почты откатывался не полностью, имя, адрес, электронная почта для отката - что делает JBoss. У меня есть блок try-catch вокруг операции сохранения, и хотя исключение перехватывается, Jboss продолжает выполнять откат.

Кто-нибудь есть какие-либо предложения относительно того, как я могу это реализовать?

Большое спасибо.

Ответы [ 2 ]

1 голос
/ 12 июня 2009

Выше приведено хорошее предложение, но я должен добавить еще немного:

Если вы находитесь в JBoss, вы используете Hibernate напрямую или JPA (EJB3.0)? Если вы используете EJB, вы можете использовать вложенные транзакции, используя аннотацию @TransactionAttribute для вызовов вашего метода в компоненте сеанса без состояния.

Если вы используете Hibernate напрямую, вам следует рассмотреть возможность использования слоя абстракции (JPA), предоставляемого JBoss (при условии, что вы используете JBoss 4+)

0 голосов
/ 12 июня 2009

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

YourTransactionalService service = ;

service.updateNameAndAddress(details);

try{
    service.updateEmail(details);
}catch( HibernateException e){
    // could just ignore it?
}

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

...