inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화

OSIV와 성능 최적화

OSIV false 일때 영속성 관련해서 질문드립니다.

458

승윤

작성한 질문수 14

0

안녕하세요 김영한 강사님,
 
OSIV를 false로 하면 트랜잭션 라이프사이클이랑 영속성 라이프 사이클이이 같이 끝맺음을 가지는거로 이해했습니다.
 
그렇다면 트랜잭션 안에서 엔티티를 save메소드로 저장 한다면 트랜잭션이 끝나고난뒤에 DB에 저장하기위해 인서트문이 날라가는게 아닌가요?
 
트랜잭션 메소드를 끝낸뒤 로그로 엔티티는 찍히는데 디비에는 저장이안되어있어서
 
findBy등으로 찾아오지못해 제가 정확히 이해를 못하는것인지, 아니면 잘못 사용하고있는것인지 궁금합니다.
 
트랜잭션안에서 save를 한뒤 정상적으로 끝난뒤에도 디비에는 존재하지 않는 이유는 무엇인가요?
 

JPA java spring spring-boot

답변 2

0

김영한

안녕하세요. seungyun9393님

트랜잭션이 정상 적용되지 않는 것 같아요.

전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.

구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx

 

주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요

 

추가로 다음 내용도 코멘트 부탁드립니다.

1. 실행 방법을 알려주세요.

2. 어떻게 문제를 확인할 수 있는지 자세한 설명을 남겨주세요.

감사합니다.

0

승윤

선생님 해결했습니다. JPA에서 트랜잭션이 정상작동하지않던 원인이 제가 임의로 아래의 빈을 등록해서 그랬던거같습니다.

주석을하면 정상적으로 트랜잭션이 작동을 하는데, 그러면 영속성을 관리할때 JPA가 아래부분을 따로 참조하는게 있을까요?

@Bean(name = "sqlSession") 
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("sqlSessionFactory") SqlSessionFactory sqlSessionTemplate) throws Exception 
{ return new SqlSessionTemplate(sqlSessionTemplate); } 

@Bean public DataSourceTransactionManager transactionManager()
{ DataSourceTransactionManager manager = new DataSourceTransactionManager(datasource()); return manager; }

0

김영한

안녕하세요. seungyun9393님

트랜잭션 관리자를 직접 등록하게 되면 JPA에서 트랜잭션 사용에 필요한 JpaTransactionManager가 자동으로 등록되지 않습니다.

감사합니다.

0

승윤

로그로 쿼리를 찍어봐도 save 호출하는 메소드는 select 밖에 안날라가고있더라구요.. 

뭐를 놓치고있는건가요?

 

import org.springframework.transaction.annotation.Transactional;
 
@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class service {
...
 
@Transactional
    public Entity insert(String id) {
      DTO dto = new DTO();
      dto.setId(id);
      Entity entity = repository.save(Entity.create(dto));
 
log.debug("entity {}", entity); //여기서는 엔티티가 정상적으로 찍힙니다.
    return entity;
// 그렇다면 return이 되고난뒤에 트랜잭션이 종료되니 insert문이 나가야하는거 아닌가요?..
  }
 
}

save말고 saveAndFlush를 사용하면.. no transaction is in progress 라고 오류가나오는데.. 왜.. @Transactional 안 메소드에서 이런에러가 생기는지..

강의 관련 외 질문입니다.

0

66

2

SpringBoot4 + Hibernate7 모듈 등록 방법 공유

0

87

1

BeanCreationException

0

87

3

Update 후 UpdateMemberResponse 매핑할 때

0

47

1

트랜잭션을 사용 안 할 때 커넥션은 언제 가져오나요?

0

99

2

페이징 + 검색조건 관련해서 질문드립니다.

0

70

1

Query Dsl Q파일 질문입니다.

0

82

1

루트 쿼리라는것은

0

58

1

메서드를 분리하는 기준

0

63

1

findAllWithMemberDelivery 메서드 질문드립니다.

0

110

3

연관관계 매핑을 안 쓸 경우, 사용해야 하는 전략

0

84

2

fetch join과 영속화와 OSIV의 관계

0

85

2

Distinct 사용 전 결과에 대한 의문

0

113

2

레포지토리 계층에서의 트랜잭션에 대한 의문

0

56

1

영속성 컨텍스트 생명주기의 신기한 부분이 있습니다.

0

78

2

dto 필드 속 엔티티 여부

0

60

1

뷰템플릿 사용 시

0

76

2

Result 클래스 관련 질문

0

56

1

@PostConstruct 프록시 관련 질문드립니다

0

86

1

DTO 대신 Form 사용은 안되나요?

0

133

1

OSIV ON 상태일 때

0

96

1

fetch join VS fetch join 페이징 궁금증

0

180

2

양방향 연관관계 알아보는 법?

0

105

1

16강 17강 간단 정리 이게 맞을까요 ?

0

165

2