jpa 영속성 컨텍스트 질문입니다.
em.persist(member1);
em.persist(order1);
em.persist(order2);
em.flush();
em.clear();
<-- order1 내용 변경 -->
em.persist(order1);
tx.commit()flush와 clear까지 하면 db에 반영은 되어있고 order1의 내용을 조금 바꾼뒤 persist하면 1차 캐시에 올라가있을텐데, commit을 하면 실제 db에 아무것도 뜨지 않습니다.
em.clear 주석 하고, 내용 변경 후 em.persist의 유무와 상관없이 db에 잘 반영이 됩니다.
clear와 persist 사이의 무슨 관계가 있는 것 같은데, db에 아무것도 뜨지 않는 이유가 뭔가요?
답변 1
1
안녕하세요, 송민석 님. 공식 서포터즈 y2gcoder 입니다.
괜찮으시다면 혹시 테스트한 코드의 전체를 올려주실 수 있으시겠습니까? 강의와 똑같이 메인 코드에다 테스트 코드를 작성하셨다면 try catch 문을 포함해서 올려주시면 답변을 드리는데 큰 도움이 될 것 같습니다!
감사합니다.
0
package jpabook.jpashop;
import jpabook.jpashop.domain.Member;
import jpabook.jpashop.domain.Order;
import jpabook.jpashop.domain.OrderStatus;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
public class JpaMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
EntityManager em = emf.createEntityManager();
EntityTransaction tx = em.getTransaction();
tx.begin();
try {
Member member1 = new Member();
member1.setName("song");
em.persist(member1);
Order order1 = new Order();
order1.setMember(member1);
em.persist(order1);
Order order2 = new Order();
order2.setMember(member1);
em.persist(order2);
em.flush();
em.clear();
//
order1.setStatus(OrderStatus.ORDER);
//
System.out.println("========================================");
em.persist(order1);
tx.commit();
}
catch (Exception e) {
tx.rollback();
} finally {
em.close();
}
emf.close();
}
}
테스트 코드 입니다.
0
전체 코드를 올려주셔서 감사합니다. 전체 코드를 보고 조심스럽게 추측해본 바로는 em.clear() 후에 식별자를 가지게 된 준영속 객체를 persist 하는 과정에서 예외가 발생할 것으로 추측합니다.
다만 catch 문에서 exception에 대한 로깅 없이 롤백을 해주고 있기 때문에 db에 아무것도 뜨지 않은 것으로 보입니다.
catch (Exception e) {
e.printStackTrace(); // 해당 부분을 추가해주십시오!
tx.rollback();
}이렇게 추가해주시고 실행해주시면 아마도 PersistencException 에 대한 트레이스가 보일 것이라 생각합니다!
예상대로 예외가 발생하여 롤백된 것이라면! 해당 링크(클릭) 을 참고해주십시오 :)
벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?
0
27
2
inheritance startegy 선택시 고려사항
0
22
1
Entity 동등성 비교
0
21
1
실무 조언 관련 질문입니다.
0
46
1
H2데이터베이스 파일 생성
0
56
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
53
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
52
1
JPQL 메소드와 락
0
55
1
Delivery @OneToOne
0
60
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
93
2
UnsupportedOperationException 발생
0
86
3
H2 Database 연결이 안됩니다.
0
95
2
연관관계 매핑 질문드립니다.
0
85
2
h2데이터베이스 실행오류
0
108
2
persistence.xml
0
108
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
80
1
영속성 컨텍스트
0
66
1
JPA 프록시
0
96
1
Native Query와 MyBatis
0
70
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
87
1
임베디드 타입 예시 코드 관련 질문
0
115
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
95
3
인텔리제이 패키지 커서 단축키 질문
0
108
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
145
1





