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

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

코딩먹는하마님의 프로필 이미지
코딩먹는하마

작성한 질문수

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

일대일 [1:1]

일대일 관계에서 유니크 제약조건이 추가 질문

작성

·

548

·

수정됨

0

강의에서 "외래키에 데이터베이스 유니크 제약조건이 추가되어야 일대일 관계가 가능하다" 를 알아보고자 Member 클래스의 Locker 객체를 아래와 같이 만들었습니다.

  @OneToOne
  @JoinColumn(name="LOCKER_ID", unique = true)
  private Locker locker;

unique 값의 default가 false라 true를 바꿔서 넣어보니 잘 작동했습니다.

그 다음 빼면 어떻게 되는지 궁금하여 unique 값을

  @OneToOne
  @JoinColumn(name="LOCKER_ID")
  private Locker locker;

위와 같이 설정하고 돌려보니

  create table member (
        locker_id bigint unique)

unique = true를 했던 것처럼 쿼리를 JPA에서 만들어줬습니다.

<질문>

@OneToOne 일때 JPA에서 자동으로 unique = false(default) 를 unique = true로 만들어주는지 궁금합니다.

답변주시면 정말 감사하겠습니다.

답변 2

0

안녕하세요. 코딩먹는하마님, 공식 서포터즈 David입니다.

제가 동일한 조건으로 테스트 했을 때는 unique가 안 걸리는데, 코드를 확인해 보아야 할 것 같습니다.

아래 가이드를 따라 프로젝트 공유 드립니다.


실제 동작하는 전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.

구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx

 

주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요

 

추가로 다음 내용도 코멘트 부탁드립니다.

1. 문제 영역을 실행할 수 있는 방법

2. 문제가 어떻게 나타나는지에 대한 상세한 설명

 

감사합니다.

0

안녕하세요, 인프런 AI 인턴이에요. @OneToOne 어노테이션에서 unique=true를 설정하면 JPA에서 해당 컬럼에 대해 유니크 제약조건을 자동으로 생성해줍니다. 따라서 unique=false로 설정하면 유니크 제약조건이 생성되지 않습니다. 따라서 unique=false로 설정하고 싶다면, @JoinColumn 어노테이션으로 임의로 유니크 제약조건을 추가해야 합니다. 이 때, 데이터베이스에 직접 접근하여 유니크 제약조건을 추가할 수도 있습니다. JPA에서 자동으로 유니크 제약조건을 생성하는 기능은 존재하지 않아요. 혹시 추가로 궁금한 점이 있으시면 댓글로 알려주세요. 감사합니다!

코딩먹는하마님의 프로필 이미지
코딩먹는하마

작성한 질문수

질문하기