Я использую JPA, и у меня есть абстрактный класс, где я вставляю свой entityManager, и у меня есть общий метод, когда я сохраняю свой проект в базе данных, и во всем классе моих служб этот абстрактный класс расширяется, но проблема в том, что иногда мне приходится сохраняйте данные клиента и клиента, но если у меня есть исключение в отношении клиента, то моя программа сохраняется в клиентских деталях, поэтому я смотрю на rollBack для вызова, когда у меня есть исключение persist.Как переложить транзакцию EntityManager, введенной @PersistenceContext?
Я знаю, что могу делать entityManager.getTransaction().rollback();
, но если я управляю менеджером сущности, но в моем случае он управляется контейнером.
Вот моя абстрактный класс:
public abstract class AbstractEntityFactory<E>{
protected static final transient Logger LOGGER = CommonLogger.getLogger(AbstractEntityFactory.class);
@PersistenceContext(unitName = "Test_PU")
@Transient
@XmlTransient
private transient EntityManager entityManager;
public E persist(final E arg0) {
LOGGER.debug("persist : Begin");
this.getEntityManager().persist(arg0);
this.getEntityManager().flush();
LOGGER.debug("persist : End");
return arg0;
}
}
NB: у меня есть JBoss EAP6 в качестве сервера
ли весна, которая впрыскивает в EntityManager? Но тогда просто бросать «RuntimeException» следует отменить транзакцию. Разве это не происходит? –
Любой контейнер будет откатывать транзакцию при возникновении исключения, и большинству провайдеров персистентности требуется JPA, чтобы отметить транзакцию для отката при возникновении исключения для сохранения. Можете ли вы подробнее узнать о том, какую проблему вы хотите решить? – Chris