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

23.12.26 23:05 작성 23.12.26 23:06 수정 조회수 113

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

 

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

감사합니다.

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.12.27

안녕하세요, 인프런 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 학습에 도움이 될 수 있기를 바랍니다!

wsmany님의 프로필

wsmany

질문자

2024.01.03

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

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

 

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

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

감사합니다ㅠㅠ