inflearn logo
강의

Course

Instructor

Java ORM Standard JPA Programming - Basics

one-on-one

OneToOne 매핑에서 Unique constraint와 Soft delete

742

alswnd04275616

4 asked

0

안녕하세요, 김영한 강사님.

일대일 관계에서 DB에 Unique constraint를 걸어준다는 것에는 공감이 되었습니다.

그런데 저번 강의 어떤 질문에서, 실무에서는 데이터 이력 유지를 위해 deleted를 나타내는 컬럼을 추가하여 활용한다고 말씀하신걸 봤는데,

이 경우 만약 Member의 기존 Locker가 삭제되어야하고, 새로운 Locker를 매핑해주어야 한다면, memberId에 걸린 Unique constraint에 의해 새로운 Locker 추가가 불가능한것이 아닌가 생각이 들었습니다.

짧은 검색을 통해 제약조건을 deleted = false인 컬럼에만 걸수 있는 방법이 있다는 것을 알았는데요,

실무에서도 이렇게 사용하시는지, 다른 방법이 있을지 궁금합니다.

감사합니다.

JPA java

Answer 2

2

yh

안녕하세요. 남규님^^

이 경우 @OneToOne을 사용하시면 안됩니다.

그리고 @Where(deleted = false) 아마 이 기능을 말씀하시는 것 같은데, 이 기능은 권장하지 않습니다. 왜냐하면 어떤 경우에는 정말 삭제된 내용을 조회해야 할 수도 있거든요.

감사합니다.

0

alswnd04275616

안녕하세요, 강사님! 늦은 시간에도 답변 감사드립니다.

혹시 @OneToOne을 사용하면 안된다는 것이 Member - One to Many - Locker 관계로 바꾸어서

Member에 List<Locker> 로 매핑이 되고, 그 안에는 deleted = true인 것들과 delete = false 인 것들이 매핑되어야 한다는 말씀이신가요? 잘 이해가 되지 않습니다 ㅠㅠ

질문의 요지는 OneToOne관계, FK에 Unique Constraint, Soft Delete 세 가지를 모두 적용할 수 있는 방법이 있는지 궁금했습니다!

검색해서 delete = false 인 것들에만 제약조건을 걸수 있다는 것을 말씀드린건, @Where 어노테이션을 말씀드린건 아니고 SQL문을 통해 제약조건 추가시에 Where delete = 0 구문을 추가하여

"delete = 0 인 row에 대해서만 memberId가 Unique하다" 라는 조건을 추가하는 방법을 혹시 사용하시는지 여쭤본것이었습니다. 예를들면 아래와 같이요,

 CREATE UNIQUE INDEX memberId_index
 ON locker (memberId)
 WHERE IsDeleted = 0

제가 질문을 자세히 말씀 못드렸던 것 같은데, 혹시 제 궁금증이 전달이 되었을까요!

0

yh

네 남규님 질문을 이해했습니다. 아쉽지만 데이터베이스에서 해당 기능을 지원하지는 않습니다.

Unique 제약조건은 해당 컬럼에 모두 적용됩니다. 부분 적용할 수 없습니다.

감사합니다.

0

alswnd04275616

답변 감사드립니다!

벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?

0

38

2

inheritance startegy 선택시 고려사항

0

26

1

Entity 동등성 비교

0

27

1

실무 조언 관련 질문입니다.

0

52

1

H2데이터베이스 파일 생성

0

61

2

서브쿼리 강의에서 ALL 예시 관련 질문드립니다.

0

58

2

수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?

0

58

1

JPQL 메소드와 락

0

57

1

Delivery @OneToOne

0

64

1

17강 4~5분대 테이블 값 조회가 안됩니다.

0

98

2

UnsupportedOperationException 발생

0

89

3

H2 Database 연결이 안됩니다.

0

98

2

연관관계 매핑 질문드립니다.

0

88

2

h2데이터베이스 실행오류

0

110

2

persistence.xml

0

113

2

양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?

0

84

1

영속성 컨텍스트

0

70

1

JPA 프록시

0

100

1

Native Query와 MyBatis

0

74

1

영속성 컨텍스트는 어떤 메모리에 저장되는건가요?

0

94

1

임베디드 타입 예시 코드 관련 질문

0

121

3

명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요

0

97

3

인텔리제이 패키지 커서 단축키 질문

0

109

2

혹시 현재는 ID 데이터 타입이 String이면 안되나요?

0

149

1