@Transactional 주석을 사용하여 트랜잭션 롤백에 문제가 있습니다. 예외가) createOrder (발생, 모든 트랜잭션이 롤백해야하지만이 발생하지 않는 경우봄에 트랜잭션을 롤백하는 방법
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);
}
}
:
나는 다음과 같은 backingbean, 서비스, DAO 클래스의 메소드를 가지고있다. 어떤 몸이라도 문제를 말해 줄 수 있습니까?
@Transactional이 JpaDaoImpl.java에 미치는 영향은 무엇입니까? persist() 및 update() 메소드는 서로 다른 radOnly 값을 갖습니다. 이 Dao는 프로젝트의 기존 코드이므로 변경할 필요가 없습니다. 아무도 도와 줄 수 있니?
감사 Bandu
후 구성을 원하는 경우 기존 코드에 영향을주지 않고 PROPAGATION_REQUIRED되는 기본 트랜잭션 전파를 유지하고 트랜잭션을 지원하는 데이터베이스를 사용하고 있는지 확인 할 수 있습니다 MyISAM 테이블은 트랜잭션을 지원하지 않는다.) DAO의'@ Transactional'은 기본적으로 아무 것도하지 않습니다 (설정이 올바른 경우). 서비스의'@ Transactional'이 우선합니다. –
db가 MySQL 인 경우 테이블은 InnoDB 엔진을 사용해야합니다. – vijay
내 데이터베이스는 Oracle입니다. 다른 화면에서 롤백하면 정상적으로 작동합니다. –