@Transactional을 SpringData와 함께 사용하는 방법?
방금 Spring-data, Hibernate, MySQL, JPA 프로젝트 작업을 시작했습니다. 수동으로 쿼리를 만드는 것에 대해 걱정할 필요가 없도록 스프링 데이터로 전환했습니다.
@Transactional
주석없이 내 쿼리를 시도했기 때문에 스프링 데이터를 사용할 때 의 사용이 필요하지 않다는 것을 알았습니다 .
@Transactional
주석을 사용하거나 사용하지 않아야하는 특별한 이유가 있습니까?
공장:
@Transactional
public List listStudentsBySchool(long id) {
return repository.findByClasses_School_Id(id);
}
또한 작동합니다 :
public List listStudentsBySchool(long id) {
return repository.findByClasses_School_Id(id);
}
미리 감사드립니다!
실제로 질문은 무엇입니까? 의 사용법 @Repository
주석 또는 @Transactional
.
@Repository
선언 한 인터페이스는 스프링 데이터 인프라가 생성하고 어쨌든 예외 번역을 활성화하는 프록시에 의해 뒷받침되므로 전혀 필요하지 않습니다. 따라서 SpringData 저장소 인터페이스에서이 주석을 사용하는 것은 전혀 효과가 없습니다.
@Transactional
-JPA 모듈의 경우 프록시 ( SimpleJpaRepository
)를 지원하는 구현 클래스에이 주석이 있습니다. 그 이유는 두 가지입니다. 첫째, 객체를 유지하고 삭제하려면 JPA에서 트랜잭션이 필요합니다. 따라서 트랜잭션이 실행 중인지 확인해야합니다.이 작업은 메서드에 @Transactional
.
같은 방법을 읽기 findAll()
및 findOne(…)
사용 @Transactional(readOnly = true)
을 엄격히 필요는 없지만 트랜잭션 인프라에 몇 가지 최적화를 트리거하는합니다 (이 설정 FlushMode
을 MANUAL
을 닫을 때 공급자가 잠재적으로 오염 검사를 건너 뛰 지속성 수 있도록 EntityManager
). 그 외에도 플래그가 JDBC 연결에 설정되어 해당 수준에서 추가 최적화가 발생합니다.
사용하는 데이터베이스에 따라 테이블 잠금을 생략하거나 실수로 트리거 할 수있는 쓰기 작업을 거부 할 수도 있습니다. 따라서 @Transactional(readOnly = true)
리포지토리 인터페이스에 해당 주석을 쉽게 추가 할 수있는 쿼리 메서드도 사용 하는 것이 좋습니다 . @Transactional
해당 인터페이스에서 선언하거나 다시 장식했을 수있는 조작 메서드에 일반 을 추가해야합니다 .
나는 질문이 조금 더 넓고 데이터 액세스 레이어의 주석에서 줄일 수 없다고 생각합니다. 응용 프로그램의 전체 스택, 적용하려는 트랜잭션 전략 등을 고려해야합니다. IBM developerworks 사이트에 Mark Richards가이 주제에 대한 매우 포괄적 인 기사 세트가 있습니다. 첫 번째는 http://www.ibm.com/developerworks/java/library/j-ts1/index.html 에서 찾을 수 있습니다 .
친애하는
@Repository
주석을 사용해야합니다.
이것은 @Repository
확인되지 않은 SQL 예외를 Spring Excpetion으로 변환하는 데 사용되며 처리해야하는 유일한 예외는DataAccessException
참고 URL : https://stackoverflow.com/questions/10394857/how-to-use-transactional-with-spring-data
'code' 카테고리의 다른 글
시스템 서명으로 Android 앱에 서명하는 방법은 무엇입니까? (0) | 2020.11.11 |
---|---|
.apk를 처음 설치할 때 서비스를 시작하는 방법 (0) | 2020.11.11 |
javascript console.log 캡처? (0) | 2020.11.10 |
Swift-코너 반경 및 그림자 문제 (0) | 2020.11.10 |
ASP.NET MVC-QueryString 값 가져 오기 (0) | 2020.11.10 |