반응형 JPA3 [JPA] org.hibernate.PersistentObjectException: detached entity passed to persist 에러 최근 김영한님의 책 자바 ORM 표준 JPA 프로그래밍을 보고 공부하고 있습니다. gradle 기반 프로젝트 구성과 책에 기재된 persistence.xml, H2 데이터베이스 버전을 높이니 하루가 다 갔네요. 이제 재밌게 따라 배워볼까하는데, 어김없이 예외가 나타났습니다. 해결 방법 이에 대한 해결 방법은 아래와 같습니다. 1. @GeneratedValue 어노테이션을 해제합니다. 2. 수동으로 식별자를 입력했다면 persist 대신 merge 를 사용해 영속화합니다. 원인 분석 org.hibernate.PersistentObjectException: detached entity passed to persist 에러를 검색해보았습니다. 먼저 아래 링크에서는 persist 메소드가 오직 영속화 된 적 없.. 2023. 6. 6. [JPA] StackOverflowError 테스트에서 assertThat()을 통해 객체 동일성 비교를 하다가 만나게 된 에러입니다. 에러를 확인하면 @Data 어노테이션 위치에서 해당 에러가 발생한 것을 확인할 수 있었습니다. 한 가지 주목할 점은 여기서 말하는 StackOverflow가 무한 재귀 함수를 돌릴 때 발생하는 그 StackOverflow와 동일다는 것입니다. 이 문제는 @Data 내부 toString()이 양방향 매핑에 의한 순환참조로 호출이 무한하게 반복되기 때문에 발생합니다. 가장 간단하게 해결할 수 있는 방법은 @ToString(exclude="대상 Attribute")를 추가해 toString() 호출 대상에서 제외하는 방법이 있습니다. 2023. 5. 27. [JPA] could not initialize proxy - no session 이 에러는 Initialize 되지 않은 Proxy 객체에 접근하는 경우 발생합니다. 대표적으로, 연관 관계에 있는 객체가 FetchType.LAZY 발라져 있는 경우 연관 관계 객체가 필요한 시점까지 select 명령을 수행하지 않습니다. 즉, Proxy 객체가 Initialize 되지 않습니다. 예를 들어, 특정 Member 객체를 조회할 때 Team 클래스 fetch 값이 FetchType.LAZY 으로 설정된 경우, 연관된 Team 객체를 가져오지 않습니다. 이 때, 객체 비교를 위해 assertThat(res).isEqualTo(member) 또는 member.getTeam().getName() 등을 수행하는 경우 실체가 없는 Proxy 객체를 호출하기 때문에 에러가 발생합니다. 이를 해결하기 .. 2023. 5. 27. 이전 1 다음 반응형