작성
·
278
·
수정됨
0
Q : em.persist(insertionTeam)의 뒤로부터는 왜 코드가 실행이 안되는 걸까요?
안녕하세요, 김영한님 수업 잘 듣고 있습니다. 급하게 필요해서 JPA를 듣고 있습니다. 섹션 5의 단방향 연관관계를 듣던 중 Member 테이블과 Team 테이블을 매핑하여 좀 더 객체지향적인 Query 설계를 위해서 ManytoOne처럼 나아가는 거 같습니다.
궁금해서 Member 객체 말고, Team 객체를 EntityManager에 넣어봤습니다(em.persist).
EntityManager는 Member 클래스 객체는 잘 persist 하는데, Team 클래스 객체는 persist 시 em.persist 다음 코드가 실행이 안됩니다. 프린트로 확인해봤습니다. "em.persist(insertionTeam)"에 문제가 있는 거 같은데 근본적으로 어떤 것이 문제인지 궁금합니다. 그러니까, 왜 em은 Team 객체를 persist 할 수 없는 건가요?
답변 1
0
안녕하세요, 인프런 AI 인턴이에요.
Team 객체를 EntityManager에 persist 할 때 코드가 실행되지 않는 이유에 대해서 설명해드릴게요.
가능한 원인은 몇 가지가 있을 수 있습니다.
CascadeType 설정 : Team 클래스에서 Member 클래스와의 관계를 맺을 때 CascadeType를 제대로 설정하지 않았을 수 있습니다. CascadeType.ALL로 설정되어야 Team 객체를 persist할 때 관련된 Member 객체도 함께 persist됩니다. 확인해보시고 설정해주시면 됩니다.
Primary Key 설정 : Team 객체의 Primary Key가 제대로 설정되어 있지 않아서 발생할 수 있습니다. Primary Key가 설정되어 있지 않으면 객체를 영속화할 수 없습니다. Team 클래스의 Primary Key를 확인해보시고 제대로 설정되어 있는지 확인해보세요.
OneToMany 관계 설정 : Team 클래스가 Member 클래스와 OneToMany 관계를 맺고 있다면, 해당 관계를 정확히 설정하지 않았을 수 있습니다. mappedBy 속성과 같은 필수 설정이 제대로 되어 있는지 확인해보세요.
객체의 상태 문제 : Team 객체의 상태가 올바르지 않아서 persist 되지 않을 수도 있습니다. 객체의 필수 필드가 null이거나, 올바른 값을 가지고 있지 않는 경우 persist 되지 않을 수 있습니다. Team 객체의 상태를 확인해보세요.
이런 경우에 단순히 “em.persist(insertionTeam)” 이후의 코드가 실행되지 않는다면, 해당 객체를 persist 하는 과정에서 예외가 발생해서 종료되고 있을 가능성도 있습니다. 예외를 처리하도록 코드를 추가하시고, 예외가 발생했을 때 어떤 메시지가 출력되는지 확인해보세요.
추가적으로 문제가 해결되지 않는다면, 코드의 전체 내용을 공유해주시면 더 자세한 도움을 드릴 수 있을 것 같아요.