我在使用 @Transactional 注释进行事务回滚时遇到问题。
我在 backingbean、service 和 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);
}
}
如果 createOrder() 中发生任何异常,所有事务都应该回滚,但它没有发生。任何机构都可以告诉我这个问题吗?
JpaDaoImpl.java 中@Transactional 的影响是什么?persist() 和 update() 方法具有不同的 radOnly 值。这个 Dao 是我们项目中的现有代码,我们不想更改它。有人可以帮忙吗?
问候, 班杜