프로그래밍/JPA 3

[JPA] 순환 참조, API 호출 시 순환 참조가 발생하는 이유

JPA의 순환 참조란 객체 간의 상호 참조가 무한 반복되는 경우를 말한다. 객체 그래프에서 한 객체가 다른 객체를 참조하고, 그 다른 객체가 다시 처음 객체를 참조하는 상황이고 스택 오버 플로우가 발생할 수 있다. 사이드 프로젝트 진행 하던 도중 Service 단 개발을 끝내고 API를 만들다가 스택 오버 플로우가 발생 하였다. 순환 참조를 미쳐 신경쓰지 못하고 있었음.. 순환 참조를 잘 예방해야겠다고 다시 한 번 생각함 Service를 테스트 할 때 까지만 해도 발생하지 않았던 문제인데 REST API를 구현하면서 문제가 발생한 이유는 ResponseBody를 구현할 시 Object 형태의 값을 직렬화를 이용해 JSON 형태로 변환하는데 이 때 순환 참조가 발생하기 때문이다. public class O..

프로그래밍/JPA 2024.03.01

[JPA] Auditing으로 저장 할 생성/수정 시간 DateTimeFormatter로 포매팅하기

엔티티가 생성되고(CreatedDate), 변경되는 시점(LastModifiedDate)을 자동으로 감지하여 column으로 저장하기 위해 Auditing 클래스인 BaseTimeEntity 클래스를 만들었다. 아래처럼 @CreatedDate 와 @LastModifiedDate 를 사용하여 LocalDateTime을 그대로 받으면 @CreatedDate private LocalDateTime createdDate; @LastModifiedDate private LocalDateTime modifyDate; 이런 형식으로 날짜, 시간이 받아진다 2023-08-19T16:23:47.960583 알아보기도 힘들고 밀리세컨드 단위가 필요없어서 년-월-일 시:분:초 형식으로 변경하기로 하였다. 형식을 본인이 받고..

프로그래밍/JPA 2023.08.21

[JPA] 엔티티의 생명주기

상태 비영속 (new/transient) : 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태 영속 (managed) : 영속성 컨텍스트에 관리되는 상태 준영속 (detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태 삭제 (removed) : 삭제된 상태 비영속 객체를 생성한 상태, JPA와 전혀 관계 없음 Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); 영속 객체를 저장한 상태 Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); EntityManager em = emf.createEntityManager..

프로그래밍/JPA 2023.01.20