문제

Hibernate를 사용하면 ID에 매핑하는 열 중 하나가 null 값을 가질 수 있는 복합 ID를 생성할 수 있습니까?

이는 null 값을 가질 수 있지만 기본 키는 없는 고유 키가 있는 레거시 테이블을 처리하기 위한 것입니다.

테이블에 새로운 기본 키 열을 추가할 수 있다는 것을 알고 있지만 이를 방지할 수 있는 방법이 있는지 궁금합니다.

도움이 되었습니까?

해결책

아니요.기본 키는 null일 수 없습니다.

다른 팁

이는 바람직하지 않습니다.대신 보기와 지도를 사용할 수 있나요?레거시 데이터가 남아 있는 경우 COALESCE를 사용하여 기본값을 제공할 수 있습니다.우리는 복합 키와 관련하여 많은 문제를 겪었고 null 값이 더 많은 문제를 일으킬 것이라고 생각합니다.

복합 키(데이터베이스가 PK에서 null을 허용한다고 가정)의 경우 null을 포함하는 최대 number_of_cols^2 - 1개의 항목을 가질 수 있습니다. 널이 없는 PK).

왜 그렇게 하고 싶나요?복합 ID는 테이블의 기본 키를 매핑해야 하며 키에 null 값을 넣는 것은 현명하지 않은 것 같습니다. 그렇죠?

편집하다: Hibernate는 그렇게 하는 것을 허용하지 않습니다.키 외부에 속성을 배치하고 필요할 때마다 필드를 고려하도록 DAO를 약간 조정할 수 있습니다.

오류는 발생하지 않지만 Hibernate는 복합 열에 대한 NULL 값이 있는 해당 행을 엔터티에 매핑할 수 없습니다.이는 결과에 NULL 값이 있는 엔터티를 얻는다는 의미입니다.

불행히도 그렇지 않습니다.해결 방법을 사용해야 했습니다.

보기에 합성 ID를 사용했습니다(!테이블 아님) 여기서 행은 정확히 2개의 열(A, B)로 식별될 수 있습니다.열(B) 중 하나는 null 값과 양의 정수를 가질 수 있습니다.그래서 내 해결 방법은 뷰에 새 열을 만드는 것입니다."BKey" 및 내 뷰는 B가 null이고 BKey 값은 -1이고 그렇지 않으면 BKey = B인 것처럼 작성됩니다.(B와 null에서는 양의 정수만 발생합니다).또한 B 대신 BKey를 사용하도록 합성 ID 구현을 변경했습니다.누군가에게 도움이 되기를 바랍니다..

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top