본문 바로가기
Spring

[일지] Static 메서드로 생성하는 객체가 자동으로 save??

by onejunu 2020. 9. 1.

 

요구 사항을 아래 처럼 정리 하였다.

 

가게는 카테고리 여러개를 가지고 있을 수 있다.
카테고리는 여러개의 가게를 가질 수 있다.
카테고리는 0개이상의 여러개의 자식을 가질수 있고 하나의 부모 혹은 부모를 가지지 않을 수 있다.

 

이를 그림으로 나타내면 

 

 

이렇게 일대다 와 다대일로 풀어서 나타낼 수 있다.

 

 

개발 공부를 하던중 재밌는 사실을 하나 발견했는데 과정을 이야기 하겠다.

 

Store와 Category를 연결하려는 작업을 하는데

 

자식 하나만 연결하면 자동으로 부모의 카테고리 까지 모두 포함시키는 함수를 작성하고자 했다.

 

 

 

 

위 처럼 카테고리와 가게를 넘기면 카테고리와 가게를 연결하는 categoryStore를 생성하는데 만약 category의 부모가 있다면 재귀로 호출하는 것이다.

 

만약 부모까지 적용해버리는 코드가 없다고 가정하자.

 

 

아래의 테스트 코드 처럼 작성한다.

 

 

<카테고리 구조>

중식

한식 -> 김밥

 

<가게> 

연우김밥

 

<가게-카테고리 연결>

연우김밥 - 한식

연우김밥 - 김밥

 

이렇게 하려고 만든 코드이며 바로 데이터베이스를 확인해보면 아래처럼 잘 나온다.

 

 

여기서 만약 아래처럼 코드를 바꾼다면??

 

아까전에 봤던 거 처럼 다시 부모를 설정하는 메서드를 작성한다. 이는 반환값이 있지만 어떠한 처리도 하지 않음!

 

category3(김밥) 만 store1(연우김밥) 에 설정하고 데이터 베이스를 살펴보자.

categoryStore의 그 어떠한 것도 영속성컨텍스트에 저장하는 명령어는 없다.

 

?? 저장이 된다.... 

 

혹시나 해서 영속성 컨텍스트를 다 비우고 다시 찾은 다음에 createCategoryStore를 실행해보자.

 

 

categoryStore를 save 하지 않았음에도 불구하고 저장이 된다.

 

여기서 알수 있는 사실은

 

어떠한 객체(A)를 static 메서드를 이용해 생성하면 그 객체와 연관관계가 있는 객체가 영속성 켄텍스트에 있다면 A객체는

영속성 컨텍스트에 등록이 된다.

 

 

댓글