인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

공공수달님의 프로필 이미지
공공수달

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

외래키를 string으로 설정하는 법

작성

·

292

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(http://bit.ly/3fX6ygx)을 먼저 확인해주세요.
3. 질문 잘하기 메뉴얼(http://bit.ly/2UfeqCG)을 먼저 읽어주세요.

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.
안녕하세요, 영한님 연관관계를 맺다보니 string인 로그인 id로 외래키를 설정하고 싶은데, 제대로 mapped by를 설정하고 해봐도 외래키 부분이 bigint로 처리가 되더라고요, 이때는 방법이 있나요?

답변 1

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. rt.slowth님

외래키도 string으로 가능합니다. 그런데 PK와 연관관계를 맺을 FK의 데이터 타입은 같아야 합니다.

현재 어떻게 설정해두셨는지, 코드를 모두 남겨주세요.

감사합니다.

공공수달님의 프로필 이미지
공공수달
질문자

@Entity
@Getter
@Builder
@AllArgsConstructor
public class Member {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "member_id")
    private Long id;

    @NotEmpty
    @Column(unique = true, name = "member_login_id")
    private String loginId; //로그인 시 ID

    @NotEmpty
    private String name;
    @NotEmpty
    private String password;

    @NotNull(message = "성별을 선택해주세요")
    @Enumerated(EnumType.STRING)
    private Gender gender;

    @JsonIgnore
    @OneToMany(mappedBy = "member")
    private List<Weight> weights = new ArrayList<>();

    @JsonIgnore
    @OneToMany(mappedBy = "member")
    private List<BloodSugarLevel> bloodSugarLevels = new ArrayList<>();

    @JsonIgnore
    @OneToMany(mappedBy = "member")
    private List<Pill> pills = new ArrayList<>();

    /**
    public void setId(Long id) {
        this.id = id;
    }**/
}
공공수달님의 프로필 이미지
공공수달
질문자

@Entity
@Getter
@Builder
@AllArgsConstructor
public class Weight {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @JsonIgnore
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "member_id")
    private Member member;
    /**
     * 외래키가 string으로 설정이 안 되는 바람에 일시적으로 멤버 테이블에 있는 PK를 몸무게 테이블의 FK로 지정
     */

    private LocalDate recordedDate;

    private Long weight;
}
공공수달님의 프로필 이미지
공공수달
질문자

로그인 아이디를 unique로 설정해두었기에 외래키로 써도 적합하다고 생각했습니다. member 와 weight를 1:n으로 맵핑하기 위해서 member의 로그인 아이디를 FK로 설정하는 과정에서 발생했습니다!
현재는 member의 PK를 그냥 weight 의 FK로 설정해두었습니다.

김영한님의 프로필 이미지
김영한
지식공유자

JPA에서 연관관계는 String, Long 같은 기본 타입이 아니라 객체(Member, Team)등등 일때만 가능합니다.

감사합니다.

공공수달님의 프로필 이미지
공공수달

작성한 질문수

질문하기