Ben JPA kullanıyorum ve ben benim varlık Manager enjekte ve soyut bir sınıf var ve ben veritabanına benim nesneyi sürdürmek ve tüm hizmetler sınıfında soyut sınıf ama genişletir genel bir yöntem var ben: bazen İstemci ve istemci ayrıntılarını sürdürmek ancak istemcinin ısrarında bir istisna varsa, programım istemci ayrıntılarını devam ettiriyor, bu yüzden devam eden bir istisna olduğumda aramak için bir rollback çağırıyorum.Nasıl @PersistenceContext tarafından enjekte edilen EntityManager'ın bir işleminin geri alınması gerekir?
entityManager.getTransaction().rollback();
gibi yapabildiğimi ancak varlık yöneticimi yönetiyorsam ancak kapsayıcı tarafından yönetildiğimi gösteriyorum.
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:
İşte benim soyut sınıftır i sunucuya
Geçerli işlem geri UserTransaction.rollback kullanmayı deneyebilirsiniz
yoluyla bunu elde etmek mümkün olmalıdır mi? Ama sonra, sadece 'RuntimeException' atmak işlemi geri almalıdır. Olmuyor mu? –
Herhangi bir kapsayıcı, bir istisna olduğunda işlemi geri alır ve çoğu kalıcılık sağlayıcıları, kalıcılık istisnası oluştuğunda JPR tarafından geri alma işleminin işaretlenmesi için gereklidir. Çözmeyi düşündüğünüz problem hakkında daha fazla bilgi verebilir misiniz? – Chris