inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

OneToOne관계 Insert 질문있습니다..

371

wsmany

작성한 질문수 1

0

안녕하세요 JPA를 공부하고 테스트하는과정에서 문제가 생겨 질문드립니다..ㅠㅠ

사용자테이블(USER)

비밀번호테이블(PASSWORD) 2개가 있고,

각각 USER_ID를 키값으로 가지고 있습니다.

 

사용자 테이블 Entity

1.png

비밀번호 Entity

2.png

 

회원가입 사용자정보(userInfo)를 입력하면 비밀번호(userPwd) 테이블에도 같이 insert되게 하고싶습니다.

 

 

3.png

여기서 문제가 생기는데 Setter함수를 되도록이면 쓰지말라고해서 생성자 초기화를 이용하여 테스트중인데

생성자를 만드는과정에서 어떻게 생성을 해야될지 모르겠습니다..

userInfo 생성자에 userPwd를 넣는게 맞는건지...

 

예상되는 insert
UserInfo테이블 admin, 기타정보들

UserPwd테이블 admin, 1234

 

아시는분있으면 도움좀 부탁드리겠습니다..ㅠㅠ

감사합니다.

jpa 스프링부트 OnetoOne save

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

wsmany님, JPA에서 OneToOne 관계를 가진 엔티티를 생성하고 insert하는 방법에 대해 궁금증을 가지고 계시군요.

엔티티의 생성자를 통해 초기화하는 것은 좋은 접근 방식입니다. UserPwd가 UserInfo에 의해 관리되는 경우, UserPwd 인스턴스를 먼저 생성한 뒤 이를 UserInfo 생성자에 전달하여 함께 persist(저장)하는 방식을 사용할 수 있습니다.

예를 들어, 다음과 같이 UserInfo와 UserPwd를 생성하고 관계를 설정하는 방법을 사용할 수 있습니다.

// 먼저 UserPwd 객체를 생성합니다.
UserPwd userPwd = new UserPwd(userId, password, hint); // userId, password, hint 실제 값으로 채우기

// UserPwd를 포함하는 UserInfo 객체를 생성합니다.
UserInfo userInfo = new UserInfo(userId, userGb, userNm, htel, email, userPwd); // 나머지 필드 실제 값으로 채우기

// UserInfo 객체를 저장하는 로직. 아마도 UserService의 join 메서드일 것입니다.
userService.join(userInfo);

userInfo를 생성할 때, userPwd도 파라미터로 받아서 내부 필드를 초기화하는 생성자를 만드는 것이 필요합니다. 즉, UserInfo 클래스 내에 생성자가 다음과 같이 정의되어야 합니다.

public UserInfo(String userId, UserGb userGb, String userNm, String htel, String email, UserPwd userPwd) {
    // 각 필드를 초기화하는 로직
    this.userId = userId;
    // ... 나머지 필드 초기화
    this.userPwd = userPwd;
}

마지막으로, UserPwd 엔티티에 mappedBy 속성이 userInfo를 가리키고 있는 것을 확인하였기 때문에, UserPwd 엔티티에 UserInfo를 설정하는 것을 잊지 말아야 합니다.

userPwd.setUserInfo(userInfo); // 양방향 관계를 설정하기 위해 UserPwd 객체에 UserInfo 객체를 설정

이렇게 하여 두 엔티티 간의 관계를 설정하고 JPA repository를 사용하여 persist 하면 UserInfo 테이블과 UserPwd 테이블에 데이터가 함께 insert 될 것입니다.

추가적으로 필요하신 내용이나 더 궁금하신 점이 있으시면 질문해 주세요. wsmany님의 JPA 학습에 도움이 될 수 있기를 바랍니다!

0

wsmany

안녕하세요 답변감사드립니다ㅠㅠ 덕분에 insert까지는 성공했습니다.

질문이 있는데 마지막단계에 userPwd엔티티에 setUserInfo를 해주지 않아도 데이터가 잘 들어가던데 저걸 해주는 이유는 무엇인가요..?

 

그리고 userPwd.setUserInfo(userInfo); 를 어디에 적어주라는건가요...?

userPwd 엔티티 생성자안에 넣어야되는건가요?

감사합니다ㅠㅠ

aws 계정 생성 질문

1

46

1

조회 메서드 네이밍 질문

0

50

1

음성불량

0

44

1

장애 격리 관련해서 궁금한 부분이 있어요

0

49

2

질문있습니다.

0

46

1

코드 깃허브는 없을까요?

1

54

2

핵사고날 아키텍처 기반으로 멀티 모듈 설계 시 질문드립니다..

0

61

2

인넬리제이 무료버전

0

52

1

Post, PostEntity에서 User, UserEntity 의존

0

53

1

내부 객체 직접 접근에 관하여.

0

91

2

CertificationServiceTest

0

51

1

FlushModeType.COMMIT (12:45) 예시코드 질문

0

57

1

readme에 대한 자료는 따로 받아볼수 있나요?

0

81

2

InvalidCurriculumException DIP 적용 여부 문의

0

67

2

Inner class로 Config를 지정하는 이유

0

58

2

Part 2 듣기전 복습하던 중, 아키텍처에 관한 질문이 있습니다.

0

92

2

테스트는 인터페이스를 대상으로 만드는것에 대해 궁금한 점이 있습니다.

0

55

1

리뉴얼 시기

0

112

2

JPA 엔티티로 만들었다고 기술종속이 아닌지에 대한 질문

0

103

3

설계 트레이드 오프 링크 접속 안됨

0

129

2

테스트 질문, 어떤것을 사용할것인것에 대해서

0

71

1

service-discovery 프로세스 가동 이유

0

76

2

트래잭션 전파 기본- 에 대한 개념 질문? 이렇게 생각해도 맞나요?

0

67

1

헥사고날 아키텍처와 DDD를 적용할 때, 화면에 강하게 연관된 조회 데이터를 어떻게 다루는 게 좋은지 궁금합니다.

0

177

2