인프런 커뮤니티 질문&답변

작성자 없음

작성자 정보가 삭제된 글입니다.

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

flush 질문 있습니다.

작성

·

170

0

강의 flush 내용에서 JPQL을 날릴때에는 자동으로 flush 가 실행된다 설명을 해주셨는데

flush만 날릴 경우에는 데이터베이스에 커밋이 되어있지 않기때문에 flush가 실행되도 조회가 되지 않을 것 같은데 JPQL은 실행될때 커밋도 함께 실행되는 건가요?

답변 1

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 형욱님

플러시를 한다고 해서 커밋이 되는 것은 아닙니다.

커밋은 별도로 실행해야 합니다.

그런데 JPA를 통해서 커밋을 하면 플러시가 자동으로 먼저 실행되고, 커밋됩니다.

감사합니다.

@Entity
public class Member {

@Id @GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="MEMBER_ID")
private Long id;

맴버 객체에 @GeneratedValue를 Auto로 선택하고

메인 클래스 파일에서

Member member = new Member();

member.,setName("test");

em.persist(member);

em.persist 할 때에 1차 캐시에 기본키를 모르기 때문에 먼저 flush를 실행하여 디비에 먼저 반영을 해서 기본키를 가져와 1차 캐시에 member 객체를 관리하는 걸로 이해를 했습니다. 

그렇다면 디비에는 반영이 들어가있지만 커밋이 실행되지 않는 상태이므로 임시적으로 디비에 값이 들어가 있다고 생각하면 되는걸까요?

그 후에 commit이 실행되면 저장되고 실행되지 않는다면 취소되는 걸로 이해하면 되는걸까요 ?

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 형욱님^^

제가 직접 정답을 알려드릴 수 도 있지만, 그러면 더 많은 것을 얻어가지 못합니다.

개발자는 궁금한 부분을 직접 코드로 테스트 해볼 때 가장 많이 배울 수 있습니다.

해당 부분을 코드로 직접 테스트해보시고, 그 결과를 공유해주세요. 그러면 함께 공부하는 분들께도 큰 도움이 될거에요.

그럼 테스트 해보시고 결과도 정리해서 공유 부탁드립니다.

감사합니다.

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기