У меня есть этот код в веб-приложении Spring / Hibernate:
Объект:
@Entity
@Table(name = "ARTICLE")
@EntityListeners(ArticleEntityListener.class)
public class ArticleLocaliseBean extends EntiteTracee {
...
Слушатель:
public class ArticleLocaliseEntityListener {
@PostUpdate
@PostPersist
private void checkQuantite(ArticleBean article) throws BusinessException {
if (article.getQuantiteStock() < 0) {
throw new BusinessException(exceptionMsg);
}
}
Этот код вызывается после каждого обновления или сохраняетсяна Article
сущность.Проблема заключается в том, что при возникновении исключения для отрицательного количества hibernate преобразует BusinessException
в RuntimeException
и выполняет откат транзакции.
java.lang.RuntimeException: xxx.exceptions.BusinessException: exceptionMsg.
at org.hibernate.ejb.event.ListenerCallback.invoke(ListenerCallback.java:53)
at org.hibernate.ejb.event.EntityCallbackHandler.callback(EntityCallbackHandler.java:94)
at org.hibernate.ejb.event.EntityCallbackHandler.postUpdate(EntityCallbackHandler.java:83)
at org.hibernate.ejb.event.EJB3PostUpdateEventListener.handlePostUpdate(EJB3PostUpdateEventListener.java:70)
at org.hibernate.ejb.event.EJB3PostUpdateEventListener.onPostUpdate(EJB3PostUpdateEventListener.java:62)
at org.hibernate.action.EntityUpdateAction.postUpdate(EntityUpdateAction.java:199)
Как сделать так, чтобы Hibernate выбрасывал проверенное исключениене время выполнения?Я не хочу откат транзакции при возникновении исключения.
Спасибо.