У меня возникла проблема с откатом транзакций, используя аннотацию @Transactional.Как откат транзакции весной
У меня есть следующие методы в backingbean, услуг и дао классов:
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);
}
}
Если какое-либо исключение происходит в CreateOrder(), все операции должны откатить, но это не происходит. Может ли кто-нибудь сказать мне проблему?
Какое влияние @Transactional в JpaDaoImpl.java? Методы persist() и update() имеют разные значения radOnly. Этот Дао - это существующий код в нашем проекте, и мы не хотим его менять. Может ли кто-нибудь помочь?
С уважением, Банду
Сообщений конфигурации и убедитесь, что вы используете базу данных, которая поддерживает транзакцию (MySQL с Таблицы MyISAM не поддерживают транзакции). '@ Transactional' на dao в принципе ничего не делает (если ваша конфигурация верна),' @ Transactional' на службе имеет приоритет. –
, если db является MySQL, таблицы должны использовать движок InnoDB. – vijay
Моя база данных - это Oracle. На другом экране откат работает нормально. –