요구 사항을 아래 처럼 정리 하였다.
가게는 카테고리 여러개를 가지고 있을 수 있다. |
카테고리는 여러개의 가게를 가질 수 있다. |
카테고리는 0개이상의 여러개의 자식을 가질수 있고 하나의 부모 혹은 부모를 가지지 않을 수 있다. |
이를 그림으로 나타내면
이렇게 일대다 와 다대일로 풀어서 나타낼 수 있다.
개발 공부를 하던중 재밌는 사실을 하나 발견했는데 과정을 이야기 하겠다.
Store와 Category를 연결하려는 작업을 하는데
자식 하나만 연결하면 자동으로 부모의 카테고리 까지 모두 포함시키는 함수를 작성하고자 했다.
위 처럼 카테고리와 가게를 넘기면 카테고리와 가게를 연결하는 categoryStore를 생성하는데 만약 category의 부모가 있다면 재귀로 호출하는 것이다.
만약 부모까지 적용해버리는 코드가 없다고 가정하자.
아래의 테스트 코드 처럼 작성한다.
<카테고리 구조>
중식
한식 -> 김밥
<가게>
연우김밥
<가게-카테고리 연결>
연우김밥 - 한식
연우김밥 - 김밥
이렇게 하려고 만든 코드이며 바로 데이터베이스를 확인해보면 아래처럼 잘 나온다.
여기서 만약 아래처럼 코드를 바꾼다면??
아까전에 봤던 거 처럼 다시 부모를 설정하는 메서드를 작성한다. 이는 반환값이 있지만 어떠한 처리도 하지 않음!
category3(김밥) 만 store1(연우김밥) 에 설정하고 데이터 베이스를 살펴보자.
categoryStore의 그 어떠한 것도 영속성컨텍스트에 저장하는 명령어는 없다.
?? 저장이 된다....
혹시나 해서 영속성 컨텍스트를 다 비우고 다시 찾은 다음에 createCategoryStore를 실행해보자.
categoryStore를 save 하지 않았음에도 불구하고 저장이 된다.
여기서 알수 있는 사실은
어떠한 객체(A)를 static 메서드를 이용해 생성하면 그 객체와 연관관계가 있는 객체가 영속성 켄텍스트에 있다면 A객체는
영속성 컨텍스트에 등록이 된다.
'Spring' 카테고리의 다른 글
[일지] 쿼리가 너무 많이 전송되는데 줄일 수 없을까? (0) | 2020.09.07 |
---|---|
[일지] Category는 삭제할 수 없다고?? (0) | 2020.09.02 |
[일지] TestRestTemplate 로 테스트 하면서 궁금했던 점(feat :NoSuchBeanDefinitionException) (0) | 2020.09.01 |
[후기] 스프링 부트와 AWS로 혼자 구현하는 웹서비스 (0) | 2020.08.29 |
[일지] JPA Auditing 안먹는 이유는? (0) | 2020.08.25 |
댓글