티스토리 뷰
순환 참조를 방지하기 위한 방법은 여러 가지가 있다.
1. @JsonIgnore
: 이 어노테이션을 붙이면 JSON 데이터에 해당 프로퍼티는 null로 들어가게 된다.
즉, 데이터에 아예 포함시키지 않는다.
2. @JsonManagedReference 와 @JsonBackReference
: 부모 클래스(Posts entity)의 Comment 필드에 @JsonManagedReference를, 자식 클래스(Comment entity)의 Posts 필드에 @JsonBackReference를 추가해주면 순환 참조를 막을 수 있다.
3.@JsonIgnoreProperties
: 부모 클래스(Posts entity)의 Comment 필드에 @JsonIgnoreProperties({"posts"}) 를 붙여주면 순환 참조를 막을 수 있다.
4. DTO 사용
: 위와 같은 상황이 발생하게된 주원인은 '양방향 매핑'이기도 하지만, 더 정확하게는 Entity 자체를 response로 리턴한데에 있다. entity 자체를 return 하지 말고, DTO 객체를 만들어 필요한 데이터만 옮겨담아 Client로 리턴하면 순환 참조 관련 문제는 애초에 방지 할 수 있다.
5. 매핑 재설정
: 양방향 매핑이 꼭 필요한지 다시 한번 생각해볼 필요가 있다. 만약 양쪽에서 접근할 필요가 없다면 단방향 매핑을 해줘서 자연스레 순환 참조 문제를 해결하자.
출처: https://dev-coco.tistory.com/133 [슬기로운 개발생활😃:티스토리]
데이터 휘발 방지 application.properties
spring.h2.console.enabled=true
spring.datasource.hikari.driver-class-name=org.h2.Driver
spring.datasource.hikari.jdbc-url=jdbc:h2:./deliverydb;AUTO_SERVER=TRUE
spring.datasource.hikari.username=sa
spring.datasource.hikari.password=
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.generate-ddl=true
logging.level.org.hibernate.SQL=debug
logging.level.org.hibernate.type.descriptor.sql=trace
server.port=8081
데이터가 쌓이는게 싫어서
spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:testdb;MODE=MYSQL
spring.jpa.show-sql=true
로 데이터 저장이 안되게 했더니 테스트 하나 할 때마다 스프링부트가 다시 실행됨.. 첫번째 코드에서 ddl-auto를 create-drop으로 설정하려고 했더니 또 스프링 재부팅됨... 그냥 db 파일 지우는 걸로....
cannot deserialize from Object value 가 핵심 에러인 듯하여 찾아보니 builder를 사용할 때 @AllArgConstructor @NoArgConstructor를 넣어주었더니 해결되었다.
'TIL(Today I Learn)' 카테고리의 다른 글
WIL 6주차(Week I Learn) (0) | 2022.06.27 |
---|---|
WIL 5주차(Week I Learn) (0) | 2022.06.19 |
TIL 220606 (0) | 2022.06.06 |
TIL 220603 (0) | 2022.06.03 |
TIL 220603 (0) | 2022.06.03 |