현재 발생하고 있는 HashTag delete 문제 잡기....
- Post 삭제 시 유일하게 해당 post와 연결되었던 hashtag 삭제하기 문제
- Referential integrity constraint violation 오류
문제의 시작,, 구멍의 연속..
일단 내가 바보같이 HashTag Entity에서 List PostHashTag 만들어놓고 여기다 add를 안함
두 번째로 안한 일,,, 바보같이 List PostHashTag 필드만 두고 연관관계 매핑 (DB와 객체와의 매핑)을 안해줌,, 그래서 이슈 2번이 발생했던 것.
Test에서는 직접 객체를 만들고 그걸 em.save 하고 바로 그 객체 이용해서 서칭을 하니까 DB 안거치고 객체 단위에서 저장된 List PostHashTag의 값들이 잘 출력됨... 하지만 InitDB에서는 당연히 DB상에서 List PostHashTag에 매핑된게 없으니 값이 없고,, 그러니 당연히 조회가 안되지.... 멍충아!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
자 이제 대망의 세번째 뻘짓 중,,, 결국 그래서 List PostHashTag 매핑을 위해 @JoinColumn을 붙여주었더니만,, 기존의 잘 돌아가던 코드까지도 오류가 나서 안돌아가기 시작 ㅠㅠㅠㅠㅠㅠㅠㅠㅠ대체 뭐가 문제냐아아아악
Caused by: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Referential integrity constraint violation: "FKH8RQ8XVEYW5GTDNQTJI8E5QR0: PUBLIC.POST_HASH_TAG FOREIGN KEY(POSTTAG_ID) REFERENCES PUBLIC.HASH_TAG(TAG_ID) (4)"; SQL statement:
insert into post_hash_tag (post_id, tag, posttag_id) values (?, ?, ?) [23506-199]
문제의 코드는 이것이다,,
뭔가 FK를 가져오는 것에 문제가 생긴 것 같은데 도저히 모르겠다...
추측이지만 cascade로 posthashtag를 영속성 컨텍스트에 저장하는 경우
post가 save되는 동시에 해당 posthashtag도 save 되는데
그전까지는 posthashtag의 id를 부여받을 수 없다,,
그런데 이미 그 전에 hashtag가 fk로 posthashtag의 id를 가져가버려서
id가 없는 일이 발생해서 오류가 나지 않나 싶다.
그렇다면 코드가 언제 SQL 문으로 변환되는지
그게 순서가 코드순이 아니라 한번에 진행되는건지
영속성 컨텍스트와 SQL 쿼리문 날리는 그 관계와 순서 진행상황을 알아야 할 것 같은데 머리가 깨질 것 같다 ㅠ 아직 영속성 컨텍스트 개념이 익숙하지 않다....
오늘은 중간에 친구랑 약속이 있어서
개발을 많이 못했다,,
이번 주 내로 이 오류 문제 해결하길 ㅠㅠㅠㅠㅠ 요즘 시험기간이랑 졸업프로젝트 때문에 정신이 없다
그래도 디버깅도 해보고 뾰족한 수가 나온것은 아니지만 구글링도 해보고 이것 저것 주석처리하고 뺏다가 추가했다 하면서 해보니까 대충 뭐때문에 안되는지 감이 슬슬 잡히기 시작했다. 비록 오늘은 아무것도 진전이 없는듯 보였으나 조금씩 발전하고 있는 거겠지..! 조급해하지 말자