복붙노트

[SPRING] @Transactional을 Spring 데이터와 함께 사용하는 방법?

SPRING

@Transactional을 Spring 데이터와 함께 사용하는 방법?

Spring 데이터, Hibernate, MySQL, JPA 프로젝트 작업을 시작했습니다. 스프링 데이터로 바꿔서 쿼리를 직접 작성하는 것에 대해 걱정할 필요가 없었습니다.

나는 스프링 데이터를 사용할 때 @Transactional을 사용하지 않아도 주석없이 쿼리를 시도 했으므로주의해야한다.

@Repository 주석을 사용해야하는 이유는 무엇입니까?

공장:

@Transactional
public List listStudentsBySchool(long id) {
    return repository.findByClasses_School_Id(id);
}

또한 작동합니다 :

public List listStudentsBySchool(long id) {
    return repository.findByClasses_School_Id(id);
}

미리 감사드립니다!

해결법

  1. ==============================

    1.실제로 당신의 질문은 무엇입니까? @Repository 주석 또는 @Transactional의 사용법.

    실제로 당신의 질문은 무엇입니까? @Repository 주석 또는 @Transactional의 사용법.

    @Repository는 선언 된 인터페이스가 스프링 데이터 인프라 스트럭처가 생성하고 예외 변환을 활성화하는 프록시에 의해 뒷받침되기 때문에 전혀 필요하지 않습니다. 따라서 스프링 데이터 저장소 인터페이스에서이 주석을 사용하는 것은 전혀 효과가 없습니다.

    @ 트랜잭션 - JPA 모듈의 경우 프록시 (SimpleJpaRepository)를 지원하는 구현 클래스에서이 주석을 사용합니다. 이것은 두 가지 이유 때문입니다. 첫째, 객체를 지속 및 삭제하려면 JPA에서 트랜잭션이 필요합니다. 따라서 우리는 트랜잭션이 실행 중인지 확인해야합니다. 트랜잭션은 @Transactional을 사용하여 주석을 달았습니다.

    findAll () 및 findOne (...)과 같은 읽기 메소드는 @Transactional (readOnly = true)을 사용하지만 트랜잭션 기반 구조에서 몇 가지 최적화를 트리거합니다 (플러시 모드를 MANUAL로 설정하면 지속성 공급자가 닫을 때 더티 검사를 건너 뛸 수 있습니다). EntityManager). 그 이상으로 플래그는 JDBC 연결에서도 설정되어 해당 레벨에서 추가 최적화가 발생합니다.

    사용하는 데이터베이스에 따라 테이블 잠금을 생략하거나 실수로 트리거 할 수있는 쓰기 작업을 거부 할 수도 있습니다. 따라서 @Transactional (readOnly = true)을 쿼리 메서드에 사용하는 것이 좋습니다.이 메서드는 해당 주석을 리포지토리 인터페이스에 쉽게 추가 할 수 있습니다. 해당 인터페이스에서 선언하거나 다시 장식 한 조작 메서드에 일반 @Transactional을 추가해야합니다.

  2. ==============================

    2.@Repository 주석을 사용해야합니다.

    @Repository 주석을 사용해야합니다.

    이것은 @Repository가 검사되지 않은 SQL 예외를 Spring Exception으로 변환하는 데 사용되기 때문에 처리해야하는 유일한 예외는 DataAccessException입니다.

  3. ==============================

    3.나는이 질문이 조금 더 넓어서 데이터 액세스 레이어의 주석에서 줄일 수 없다고 생각한다. 우리는 응용 프로그램의 전체 스택, 적용하려는 트랜잭션 전략 등을 고려해야합니다. IBM developerworks 사이트의 Mark Richards는이 주제에 대해 매우 포괄적 인 기사를 제공합니다. 여기에서 첫 번째 항목을 찾을 수 있습니다. http://www.ibm.com/developerworks/java/library/j-ts1/index.html

    나는이 질문이 조금 더 넓어서 데이터 액세스 레이어의 주석에서 줄일 수 없다고 생각한다. 우리는 응용 프로그램의 전체 스택, 적용하려는 트랜잭션 전략 등을 고려해야합니다. IBM developerworks 사이트의 Mark Richards는이 주제에 대해 매우 포괄적 인 기사를 제공합니다. 여기에서 첫 번째 항목을 찾을 수 있습니다. http://www.ibm.com/developerworks/java/library/j-ts1/index.html

    친애하는

  4. from https://stackoverflow.com/questions/10394857/how-to-use-transactional-with-spring-data by cc-by-sa and MIT license