@Transactional with JPA and Hibernate의 사용법은 무엇입니까?
JPA와 휴지 상태 및 MySQL 데이터베이스를 사용하여 REST API를 작성하는 방법을 배우고 있는데 @Transactional 주석을 봅니다.누가 이 주석의 용도를 설명해 줄 수 있나요?
예를 들어 다음과 같은 간단한 DAO 클래스가 있습니다.
@Repository
public class EmployeeDAOHibernateImpl implements EmployeeDAO {
// define field for entitymanager
private EntityManager entityManager;
// set up constructor injection
@Autowired
public EmployeeDAOHibernateImpl(EntityManager entityManager) {
this.entityManager = entityManager;
}
@Override
@Transactional
public List<Employee> findAll() {
// get the current hibernate session
Session currentSession = entityManager.unwrap(Session.class);
// create a query
Query<Employee> theQuery =
currentSession.createQuery("from Employee", Employee.class);
// execute query and get result list
List<Employee> employees = theQuery.getResultList();
// return the results
return employees;
}
}
findAll() 메서드에 사용되는 @Transactional이 표시됩니다만, 이 @Transactional을 삭제해도 같은 출력이 표시됩니다.그럼 이 @Transactional의 용도는 무엇입니까?
@Transactional
주석은 트랜잭션에서 특정 메서드/클래스(=내부 모든 메서드)를 실행할 때 사용됩니다.
사용자라고 가정합니다.A
100달러를 사용자에게 전송하려고 합니다.B
. 어떤 일이 일어나는지:
- A의 어카운트를 100달러 감액합니다.
- 우리는 B의 계정에 100달러를 추가한다.
성공 후 예외가 발생한다고 가정합니다.1)
실행 전2)
이제 우리는 어떤 모순을 가지게 될 것이다 왜냐하면A
100달러 분실B
아무것도 없어요거래는 전부 또는 무를 의미합니다.메서드의 어딘가에 예외가 있는 경우 변경은 데이터베이스에서 유지되지 않습니다.라고 하는 것rollback
일어난다.
지정하지 않으면@Transactional
각 DB 콜은 다른 트랜잭션으로 처리됩니다.
일반적으로는@Transactional
주석은 서비스 수준에서 작성됩니다.
데이터베이스에 있는 두 개 이상의 쓰기를 단일 원자 연산으로 결합하기 위해 사용됩니다.
누군가가 주석을 단 메서드를 호출할 때@Transactional
데이터베이스의 쓰기가 모두 또는 전혀 실행되지 않습니다.
읽기 작업의 경우 유용하지 않으므로 단일 원자 쓰기인 경우 유용합니다.1회 읽기(선택)로 사용하고 있기 때문에 추가 또는 삭제한다.@Transactional
주석은 영향을 주지 않습니다.
클래스가 선언합니다.@Transactional
Spring은 자체 또는 해당 멤버에 대해 주석을 다는 클래스와 동일한 인터페이스를 구현하는 프록시를 만듭니다.즉, 봄은 콩을 대신 싸서 콩 자체는 전혀 알지 못한다.
프록시는 Spring이 메서드 호출의 전, 후 또는 주변 동작을 프록시 대상 객체에 주입하는 방법을 제공합니다.
내부적으로는 트랜잭션어드바이스(AOP 사용)를 사용하는 것과 같습니다.이 어드바이스에서는 프록시가 먼저 생성되고 타겟빈의 메서드 전후에 호출됩니다.
에는 ""가 되어 있습니다.TransactionInterceptor
이치노?@Transactional
인 '됩니다.TransactionInterceptor
는 프록시 객체에서 먼저 호출되며 트랜잭션이 시작되고 최종적으로 타깃빈에서 메서드가 호출됩니다.되면, 「」는TransactionInterceptor
에 따라
언급URL : https://stackoverflow.com/questions/54326306/what-is-the-use-of-transactional-with-jpa-and-hibernate
'programing' 카테고리의 다른 글
몽구스:전체 사용자 목록 가져오기 (0) | 2023.03.07 |
---|---|
(각의 라우터)해결 프로세스 중 애니메이션 로드 표시 (0) | 2023.03.07 |
권장 스케일러블 각도JS 프로젝트 구조? (0) | 2023.03.07 |
효소 설정 파일은 어디에 작성해야 합니까? (0) | 2023.03.07 |
WP의 특정 페이지에 대한 "현재 메뉴 항목" 클래스 사용자 지정 설정 (0) | 2023.03.07 |