링크 테이블에 추가 속성이있는 다 대다 관계가 있습니다. 따라서 링크 테이블은 엔터티 클래스로도 표현되며 Composition
이라고합니다. Composition
의 기본 키는 해당 엔터티에 연결되는 @Embeddable
입니다 (예 : 2 @ManyToOne
참고 문헌.JPA @EmbeddedId : 복합 기본 키의 일부를 업데이트하는 방법은 무엇입니까?
사용자가 2 개의 참조 중 하나를 선택할 때 오류가 발생하여 복합 기본 키를 업데이트해야 할 수 있습니다. 그러나 JPA (최대 절전 모드) 작동 방식으로 인해 업데이트 대신 새 행 (삽입)이 생성되고 이전 Composition
은 여전히 존재합니다. 결과적으로 업데이트되는 행 대신 새로운 행이 추가됩니다.
옵션 1 :
새로운 하나를 삽입하기 전에 이전 Composition
그냥 삭제 될 수 있지만이 따라 방법이 이전과 새 버전을 모두 필요로 처리 할 것을 요구한다. 더하기 업데이트 된 버전은 실제로 새로운 엔티티이므로 낙관적 인 잠금 기능이 작동하지 않으므로 마지막 업데이트가 항상 성공합니다.
옵션 2 :
네이티브 쿼리. 또한 쿼리는 버전 열을 증가시키고 WHERE 절에 버전을 포함시킵니다. 업데이트 수가 0 (동시 수정 또는 삭제) 일 경우 OptimisticLockException
을 던져
더 나은 선택은 무엇입니까? 이 문제에 대한 "일반적인 접근 방식"은 무엇입니까?
당신은 가질 수없는'Id' @와'EmbeddedId' @ 일반 JPA에서 동일한 실체이다. 둘 중 하나입니다. –
@beginner_ 아니요,'@ Id '만 있으면'@ EmbeddedId'가 없습니다 (제 편집 참조). 조인중인 두 엔티티를 참조하는 외래 키는 기본 테이블의 열 2 개뿐입니다. 엔티티들 사이의 연관성을 바꾸는 것은 원래의 자동 생성 값으로 남아있는'Composition' 엔티티/레코드의 기본 키가 아닌 외래 키를 변경하는 것입니다. – DuncanKinnear
감사합니다. 그렇게 명백하다. 더 이상 명확하게 볼 수없는 물건에 너무 깊숙한 전형적인 경우. –