Je suis confronté à un problème de restauration de transaction en utilisant l'annotation @Transactional.Comment annuler une transaction au printemps
Je les méthodes suivantes dans les classes backingbean, service et dao:
public class ItemBackingBean {
public void saveUpdate() {
try {
ItemService.executeTransaction();
}
catch(Exception e) {
}
}
}
public class ItemService {
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void executeTransaction() {
deleteItem();
createOrder();
}
private void deleteItem() {
persist();
}
private void createOrder() {
persist();
}
private void persist() {
JpaDaoImpl.persist(object);
JpaDaoImpl.update(object);
}
}
public class JpaDaoImpl implements JpaDao {
@Transactional(readOnly = true)
public persist(Object object) {
getEm().persist(object);
}
@Transactional(readOnly = false, propagation = Propagation.REQUIRED)
public void update(Object object) {
getEm().merge(object);
}
@Transactional(readOnly = true)
public void remove(Object object) {
getEm().remove(object);
}
}
Si une exception se produit dans CreateOrder(), toutes les transactions doivent rollback mais il ne se produit pas. Quelqu'un peut-il me dire le problème?
Quel est l'impact de @Transactional dans JpaDaoImpl.java? Les méthodes persist() et update() ont des valeurs radOnly différentes. Ce Dao est le code existant dans notre projet et nous ne voulons pas le changer. Quelqu'un peut-il aider?
Cordialement, BANDU
après votre configuration et assurez-vous que vous utilisez une base de données qui prend en charge les transactions (MySQL avec Les tables MyISAM ne supportent pas les transactions). Le '@ Transactional' sur le dao ne fait rien (si votre configuration est correcte), le' @ Transactional' sur le service est prioritaire. –
si la base de données est MySQL, les tables doivent utiliser le moteur InnoDB. – vijay
Ma base de données est Oracle. Sur l'autre écran de retour en arrière fonctionne correctement. –