티스토리 뷰
모두어리 도메인/레포지토리 코드를 짠 후, 간단한 테스트 케이스를 작성하던 중에 제목의 예외와 부딪혔다
도메인 간 양방향 매핑에서 CASCADE 설정을 바꿔주면 된다는 말이 많았는데,
CASCADE와 관련 없는 단일 도메인 테스트 중 나타난 경우라 당황스러웠다
테스트 대상이었던 엔티티 클래스의 코드이다
@Entity
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class Member{
@Id
@GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
private String name;
private String email;
private String password;
}
보시다시피 엔티티에 전이와 관련된 내용이 없었다
레포지토리의 코드와 실패한 테스트 코드는 아래와 같았다
@Repository
@RequiredArgsConstructor
public class MemberRepository {
private final EntityManager em;
//회원 정보 저장
public void save(Member member){
em.persist(member);
}
//단일 회원 조회
public Member findone(Long id){
return em.find(Member.class, id);
}
}
@Test
@Rollback(false)
public void 회원가입과_조회() {
Member member = new Member(1L, "cat", "cat@gmail.com", "graycat");
Long savedId = memberService.join(member);
Assert.assertEquals(member, memberRepository.findOne(savedId);
}
memberService에는 레포지토리의 save를 호출하고 id값을 반환받는 코드가 있었다
예외가 발생하기에는 너무 단순한 코드라 당황했는데,
@GeneratedValue로 자동생성한 값을 테스트 케이스에서 생성할 때 직접 입력한 것이 문제였다
member 객체를 new Member()로 생성하면 해결이 되었으나,
필드값을 지정해서 실제로 DB에 저장되는 것을 보고싶었다
하지만 이 프로젝트에서 public으로 열린 setter 메소드를 사용하지 않기로 정했기 때문에,
Member 클래스와 테스트의 생성문을 아래와 같이 수정해서 해결했다
//어노테이션 생략
public class Member{
@Id
@GeneratedValue
@Column(name = "MEMBER_ID")
private Long id;
private String name;
private String email;
private String password;
private void setMemberInfo(String name, String email, String password){
this.name = name;
this.email = email;
this.password = password;
}
public static Member createMember(String name, String email, String password){
Member member = new Member();
member.setMemberInfo(name, email, password);
return member;
}
}
Member member = Member.createMember("cat", "cat@gmail", "1234");
이렇게 하면 멤버 객체를 생성할 때가 아니면 필드값을 수정할 수 없다
코드를 수정하고 테스트를 실행하니 다행히 초록불이 잘 들어오고, DB에 데이터가 들어가는 것도 확인됐다다
기초적인 사항 같은데 잘 몰랐구나 하고 머쓱한 한편, 역시 깨지면서 찾아보고 배우는 게 잘 남아서 기쁘기도 하다
'JPA' 카테고리의 다른 글
JPA 영속성 컨텍스트의 그림으로 보는 이해 (0) | 2021.04.23 |
---|---|
객체-테이블 매핑과 기본 동작 확인 (0) | 2021.04.17 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글