회원가입 테스트를 하려고했는데 JoinForm을 찾지 못하는 오류가 발생
검색을 통하여 왜 이런 오류가 발생하는지 찾아봤더니 이러한 문제가 있었다.
생성자 바인딩 이슈
Spring FrameWork 6.1 버전으로 업그레이드 되면서 LocalVariableTableParameterNameDiscoverer 를 사용하지 않게되면서 이로 인해 발생할 수 있는 매개 변수 관련 이슈는 -parameter 옵션을 complier에서 활성화 시켜줘야함.
Complier -> java Compiler -> Additional command line parameters
-parameters 추가하기.
like를 표시시에 해당하는 insta객체에 from 과 to를 넣어주지 않은 부분
jpa에서는 알아서 매핑을 해서 데이터를 넣어주지만 JPA를 사용하지 않은 순수한 객체로 진행하는 경우 LikeablePerson.fromInstaMember 와 LikeablePerson.ToInstaMember 두 개는 제대로 나오겠지만 반대 연관관계인 instamember.fromLikeablePeople에는 값이 설정되지 않았기 때문에 해당 부분에서 데이터가 없다고 나오기 때문이다.
- 이런 이유 때문에 순수한 객체까지 고려한 반대 방향에 리스트에도 값을 넣어주는 방식을 사용해줘야함.
양쪽에 값을 설정하지 않고서 JPA 를 통해 객체를 추가시 DB에 바로 insert 되는 것이 아니라 영속성 컨텍스트의 1차 캐시에저장되고, 자식 엔티티 객체를 추가한 후에 이를 반영하지 않은 상태에서 부모 엔티티 객체를 조회하게 되면 추가 했던 자식 엔티티 객체는 아직 DB에 추가되지 않았기 때문에 새로운 자식 엔티티 객체를 제외한 값들만 가지게 되는 문제
public RsData<LikeablePerson> like(Member member, String username, int attractiveTypeCode) {
InstaMember fromInstaMember = member.getInstaMember();
InstaMember toInstaMember = instaMemberService.findByUsernameOrCreate(username);
if (member.getInstaMember().getUsername().equals(username)) {
return RsData.of("F-1", "본인은 호감상대로 저장할 수 없습니다.");
}
LikeablePerson likeablePerson = LikeablePerson.builder()
.fromInstaMember(fromInstaMember)
.fromInstaMemberUsername(fromInstaMember.getUsername())
.toInstaMember(toInstaMember)
.toInstaMemberUsername(toInstaMember.getUsername())
.attractiveTypeCode(attractiveTypeCode)
.build();
likeablePersonRepository.save(likeablePerson);
return RsData.of("S-1", "입력하신 인스타 유저(%s)를 호감상대로 등록되었습니다.".formatted(username), likeablePerson);
}
fromInstaMember.addFromLikeablePerson(likeablePerson);
toInstaMember.addToLikeablePerson(likeablePerson);
관련 참조 : https://ppusda.tistory.com/78
참고한 블로그
https://colabear754.tistory.com/142
참고한 강의
https://www.inflearn.com/course/ORM-JPA-Basic/
-- 지속적으로 생기면 추가 예정 --