OneToOne 매핑에서 Unique constraint와 Soft delete
742
4 asked
안녕하세요, 김영한 강사님.
일대일 관계에서 DB에 Unique constraint를 걸어준다는 것에는 공감이 되었습니다.
그런데 저번 강의 어떤 질문에서, 실무에서는 데이터 이력 유지를 위해 deleted를 나타내는 컬럼을 추가하여 활용한다고 말씀하신걸 봤는데,
이 경우 만약 Member의 기존 Locker가 삭제되어야하고, 새로운 Locker를 매핑해주어야 한다면, memberId에 걸린 Unique constraint에 의해 새로운 Locker 추가가 불가능한것이 아닌가 생각이 들었습니다.
짧은 검색을 통해 제약조건을 deleted = false인 컬럼에만 걸수 있는 방법이 있다는 것을 알았는데요,
실무에서도 이렇게 사용하시는지, 다른 방법이 있을지 궁금합니다.
감사합니다.
Answer 2
2
안녕하세요. 남규님^^
이 경우 @OneToOne을 사용하시면 안됩니다.
그리고 @Where(deleted = false) 아마 이 기능을 말씀하시는 것 같은데, 이 기능은 권장하지 않습니다. 왜냐하면 어떤 경우에는 정말 삭제된 내용을 조회해야 할 수도 있거든요.
감사합니다.
0
안녕하세요, 강사님! 늦은 시간에도 답변 감사드립니다.
혹시 @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
네 남규님 질문을 이해했습니다. 아쉽지만 데이터베이스에서 해당 기능을 지원하지는 않습니다.
Unique 제약조건은 해당 컬럼에 모두 적용됩니다. 부분 적용할 수 없습니다.
감사합니다.
벌크연산에서 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

