(* 차근차근 학습해나가는 과정이라 글 내용에 오류가 있을 수 있습니다. 피드백 주시면 반영하겠습니다.)
1. tabindex 와 모달창의 관계?
(위 사진의 별점은 starrr 라이브러리(jQuery의 플러그인)를 이용하였습니다.)
(위 프로젝트는 '코드로 배우는 스프링 부트 웹 프로젝트' 교재를 참고하였습니다.)
$(".reviewModal").modal("show");
위와 같이 모달창을 띄우도록 js코드를 작성하던 중,
저 코드를 주석처리하지 않으니 글 작성 후 저장이나 수정을 해도 모달창이 사라지지 않는 현상이 발생했다.
작성한 값들은 잘 넘어가고 화면에도 정상적으로 반영되었으나, 모달창만 어째서인지 계속 띄워지는 현상이었다.
해결은 주석처리로 간단하게 해결되었으나, 필요한 모달창들에는 tabindex = -1 / tabindex = -2 가 설정되어있는것을 보았다.
tabindex는 문서의 탭 순서 안에서 현재 요소의 순번을 결정한다고 하며,
이 값이 음수일 경우에는 탭으로 도달이 불가능하다고 한다.
상황으로 예를 들자면
아이디와 비밀번호 입력창이 input 요소로 각각 1개, 로그인 버튼은 button 요소로 1개 존재할 때
버튼의 tabindex값이 -1이라면 tab버튼 클릭시 button 요소는 건너뛴다는 뜻이다.
이를 통해 tabindex의 값을 음수로 정할 때는
그 요소를 특정 상황에만 사용가능할 수 있는, 처음에는 비활성화된 상태가 필요할때라는 것을 알게 되었다.
=> return: tabindex의 역할은 이번 기회를 통해 확실히 알게 되었으나,
모달창이 계속 뜬건 아무래도 modal의 show 속성과 연관이 있는 것 같다.
modal을 출력할 조건을 만족할때만 사용해야 하는데 원인은 코드 선언 위치였고,
그렇기에 주석처리를 통해 간단히 해결된 것이었다.
2. cascade = CascadeType.ALL
// Caused by: org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing .......
개인 프로젝트에서 여러 엔티티를 생성하고 데이터를 넣는 테스트를 했었는데
그 때 출력되었던 예외이다.
예외만 뜨면 바로 구글링을 하는게 습관인 주인장이라
못 참고 또 구글링을 했고, 이를 통해 얻게된 정보는
엔티티의 연관관계 설정이 되지 않아 생긴 예외라는 것이었다.
A라는 엔티티와 B라는 엔티티가 있다고 가정을 하고
이 둘이 M:1 관계로 설정 되어 있다.
나의 경우는 A엔티티를 추가하는데 이때 B엔티티의 id값이 존재하지 않아 발생했던 예외였다.
B엔티티의 참조변수에
ManyToOne 어노테이션의 속성값으로
cascade = CascaseType.ALL 을 부여하니 예외가 발생하지 않게 되었다.
(다만 id값은 null로 추가 되었고, 이는 삽입 테스트 데이터 조정을 통해 해결하였다.)
FetchType.LAZY / cascade 등 엔티티 연관관계 어노테이션 속성에 대해
다시 한번 볼 필요를 느꼈고,
자바와 SQL, 코테 공부도 중요하지만 엔티티의 관계와 프레임워크도 다시 봐둬야 할 필요성을 느낀 하루 였다.