BlogController.java 필드에 private final AuthenticatedUser authenticatedUser
가 있어서 그런거였다. 이게 코드를 고치다가 적혀있어서 실행할 때 오류가 난 거였다. 사용하지 않는 코드라서 바로 지우니까 됐다..하핳 간단
빈에 등록이 안되어 있다고 나타난 에러인 듯 하다.
2022-12-28T19:21:35.184+09:00 ERROR 13060 --- [nio-8080-exec-7] o.h.engine.jdbc.spi.SqlExceptionHelper : Referential integrity constraint violation: "FKKAP39F76WN135K7RU564FBJB7: PUBLIC.COMMENT FOREIGN KEY(BLOG_ID) REFERENCES PUBLIC.BLOG(ID) (CAST(1 AS BIGINT))"; SQL statement:
delete from blog where id=? [23503-214]
2022-12-28T19:21:35.186+09:00 INFO 13060 --- [nio-8080-exec-7] o.h.e.j.b.internal.AbstractBatchImpl : HHH000010: On release of batch it still contained JDBC statements
2022-12-28T19:21:35.204+09:00 ERROR 13060 --- [nio-8080-exec-7] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint ["FKKAP39F76WN135K7RU564FBJB7: PUBLIC.COMMENT FOREIGN KEY(BLOG_ID) REFERENCES PUBLIC.BLOG(ID) (CAST(1 AS BIGINT))"; SQL statement:
delete from blog where id=? [23503-214]]] with root cause
org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException: Referential integrity constraint violation: "FKKAP39F76WN135K7RU564FBJB7: PUBLIC.COMMENT FOREIGN KEY(BLOG_ID) REFERENCES PUBLIC.BLOG(ID) (CAST(1 AS BIGINT))"; SQL statement:
delete from blog where id=? [23503-214]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:508) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:477) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.get(DbException.java:223) ~[h2-2.1.214.jar:2.1.214]
at org.h2.message.DbException.get(DbException.java:199) ~[h2-2.1.214.jar:2.1.214]
...
PUBLIC.COMMENT FOREIGN KEY(BLOG_ID) REFERENCES PUBLIC.BLOG(ID)
orphanRemoval = true
CascadeType.REMOVE
@OneToMany(mappedBy = "blog", orphanRemoval = true)
@OneToMany(mappedBy = "BLOG", cascade = CascadeType.REMOVE)
cascade
는 영속성 전이에 관한 옵션public enum CascadeType {
All, // 모두 적용
PERSIST, // 영속
REMOVE, // 삭제
MERGE, // 병합
REFRESH, // REFRESH
DETACH, // DETACH
}
orphanRemoval = true
는 연관된 엔티티 간의 참조가 끊어질 때 삭제가 이루어짐
cascade = CascadeType.REMOVE
는 부모 엔티티를 삭제하면 자식 엔티티를 삭제하는 것이지 참조가 끊어질 때 삭제가 이루어지는 것은 아님. 원래 엔티티가 삭제될 때 연관된 엔티티를 전부 삭제
그래서 cascade를 쓰니까 에러가 사라짐!
참조
https://khdscor.tistory.com/18
https://bcp0109.tistory.com/332