[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.실제로 당신의 질문은 무엇입니까? @Repository 주석 또는 @Transactional의 사용법.
실제로 당신의 질문은 무엇입니까? @Repository 주석 또는 @Transactional의 사용법.
@Repository는 선언 된 인터페이스가 스프링 데이터 인프라 스트럭처가 생성하고 예외 변환을 활성화하는 프록시에 의해 뒷받침되기 때문에 전혀 필요하지 않습니다. 따라서 스프링 데이터 저장소 인터페이스에서이 주석을 사용하는 것은 전혀 효과가 없습니다.
@ 트랜잭션 - JPA 모듈의 경우 프록시 (SimpleJpaRepository)를 지원하는 구현 클래스에서이 주석을 사용합니다. 이것은 두 가지 이유 때문입니다. 첫째, 객체를 지속 및 삭제하려면 JPA에서 트랜잭션이 필요합니다. 따라서 우리는 트랜잭션이 실행 중인지 확인해야합니다. 트랜잭션은 @Transactional을 사용하여 주석을 달았습니다.
findAll () 및 findOne (...)과 같은 읽기 메소드는 @Transactional (readOnly = true)을 사용하지만 트랜잭션 기반 구조에서 몇 가지 최적화를 트리거합니다 (플러시 모드를 MANUAL로 설정하면 지속성 공급자가 닫을 때 더티 검사를 건너 뛸 수 있습니다). EntityManager). 그 이상으로 플래그는 JDBC 연결에서도 설정되어 해당 레벨에서 추가 최적화가 발생합니다.
사용하는 데이터베이스에 따라 테이블 잠금을 생략하거나 실수로 트리거 할 수있는 쓰기 작업을 거부 할 수도 있습니다. 따라서 @Transactional (readOnly = true)을 쿼리 메서드에 사용하는 것이 좋습니다.이 메서드는 해당 주석을 리포지토리 인터페이스에 쉽게 추가 할 수 있습니다. 해당 인터페이스에서 선언하거나 다시 장식 한 조작 메서드에 일반 @Transactional을 추가해야합니다.
-
==============================
2.@Repository 주석을 사용해야합니다.
@Repository 주석을 사용해야합니다.
이것은 @Repository가 검사되지 않은 SQL 예외를 Spring Exception으로 변환하는 데 사용되기 때문에 처리해야하는 유일한 예외는 DataAccessException입니다.
-
==============================
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
친애하는
from https://stackoverflow.com/questions/10394857/how-to-use-transactional-with-spring-data by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 프로덕션 환경에서 스프링 부트 실행 가능 jar를 실행하려면 어떻게해야합니까? (0) | 2018.12.28 |
---|---|
[SPRING] 내 비즈니스 계층에 EJB3 또는 Spring을 사용해야합니까? (0) | 2018.12.28 |
[SPRING] Spring 설정 파일에서 bean id와 name을 사용하는 차이점 (0) | 2018.12.28 |
[SPRING] Spring BeanPostProcessor는 정확히 어떻게 작동합니까? (0) | 2018.12.28 |
[SPRING] 최대 절전 모드 + 스프링 캐싱 - 몇 가지 질문! (0) | 2018.12.28 |