inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

자바 ORM 표준 JPA 프로그래밍 - 기본편

Hello JPA - 애플리케이션 개발

tx.commit() 은 언제나 할 수 있는 것이 아닌가요?

해결된 질문

503

컴퓨터공부하자

작성한 질문수 54

0

commit은 해당 정보를 스냅샷해서 저장한다는 개념이잖아요?

즉 변화가 일어났든지 일어나지 않든지 1시에 커밋했다가 2시에 컷밋할 수도 있잖아요? 별로 의미가 없을지는 모르겠지만 논리적으로 오류는 없으니까 가능하지 않을까 생각했습니다.

그래서 test할 때 tx.commit()을 try catch 문의 finally에 넣어보았습니다. 변화가 있든지 없든지 롤백되든지 commit() 해라는 의미로요.

tx.begin();

try{

로직

} catch(Exception e){

tx.rollback();

}

finally{

tx.commit();

em.close();

}

일단 로직은 tx.commit()을 catch 안에 뒀을 시 예외가 발생하는 로직입니다.  

아무튼 tx.commit을 finally 안에 넣고 실행하면 Transaction not successfully started 라는 애러가 뜨게 됩니다.

질문을 정리하자면

1. 변화가 없는 상테에서 commit이 가능한가요?

2. 왜 finally 안에 tx.commit()이 있으면 Transaction not successfully started 오류가 발생할까요?

java JPA

답변 1

1

김영한

안녕하세요. 컴퓨터공부하자님

생각하신 것 처럼 commit은 정상적일 때도 할 수 있고, 예외가 발생해도 commit을 할 수 있습니다.

지금 이 오류가 뜨는 것은 뭔가 로직에 다른 문제가 있는 것 같습니다.

추가로 도움이 필요하시면 전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.

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

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

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

감사합니다.

0

컴퓨터공부하자

답변 감사합니다! 오류는 해결하였습니다. 로직상에 사용된 entity manager가 transaction을 생성한 entity manager와 다른 entity manager였고 이미 close()된 상태였습니다. 결론적으론 오타때문에 발생한 문제였습니다. 영한님께서 말씀하신 것처럼 로직상의 문제가 맞네요! 다만 오류 로그가 어째서 "null pointer exception"이나 "사용할 수 없는 entity manager 입니다." 라고 뜨지 않았는지는 조금 의문이네요. em.close() 되면 em은 null이 되는 것이 아닌가봐요.

0

김영한

네 자바언어에서 null이 될려면 em = null 처럼 직접 외부에서 널 참조를 넣어주어야 합니다.

감사합니다.

벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?

0

55

2

inheritance startegy 선택시 고려사항

0

38

1

Entity 동등성 비교

0

40

1

실무 조언 관련 질문입니다.

0

65

1

H2데이터베이스 파일 생성

0

76

2

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

0

67

2

수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?

0

62

1

JPQL 메소드와 락

0

62

1

Delivery @OneToOne

0

70

1

17강 4~5분대 테이블 값 조회가 안됩니다.

0

104

2

UnsupportedOperationException 발생

0

97

3

H2 Database 연결이 안됩니다.

0

101

2

연관관계 매핑 질문드립니다.

0

94

2

h2데이터베이스 실행오류

0

114

2

persistence.xml

0

119

2

양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?

0

87

1

영속성 컨텍스트

0

74

1

JPA 프록시

0

105

1

Native Query와 MyBatis

0

81

1

영속성 컨텍스트는 어떤 메모리에 저장되는건가요?

0

97

1

임베디드 타입 예시 코드 관련 질문

0

125

3

명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요

0

101

3

인텔리제이 패키지 커서 단축키 질문

0

112

2

혹시 현재는 ID 데이터 타입이 String이면 안되나요?

0

152

1