2010-04-01 3 views
3

Hibernate는 naturalID로 표시된 필드에 notnull 제약 조건을 생성하지 않는 것 같습니다. 이게 정상인가?Hibernate naturalID

@MappedSuperclass 
public class AbstractDomainObject extends PersistentObject { 

@NaturalId 
private String code; 

DB 스키마 : CONSTRAINT SYS_CT_47 UNIQUE (CODE) 여기에는 널 (null) 제약이되지 않습니다.

답변

3

체크 아웃 Hibernate의 참조 설명서에서 다음 발췌 :

자연 키는 독특하고 null 이외의 속성이나 특성의 조합입니다. 또한 불변입니다. 자연 키의 속성을 @NaturalId로 매핑하거나 < natural-id > 요소 내에 매핑합니다. Hibernate는 필요한 유일 키와 null 허용 제한을 생성 할 것이고, 결과적으로 당신의 매핑은 더 문서화가 될 것이다.

참고 또한 기본적으로, 자연 식별자 속성은 당신은

+0

@NaturalId (mutable = true)를 지정하여 그러나 "를 Hibernate가 필요한 고유 키와 null 허용 제약 조건을 생성합니다"하고 경우 기본값을 변경할 수 있습니다 불변 (상수)로 간주된다 제공된 예에서는 표시되지 않습니다. 이는 정상적인 동작이 아님을 의미합니다. 그렇다면 "예"는 무엇을 의미합니까? –

+0

네 말이 맞아. 내 "예"는 혼란 스러웠다. 마치 Hibernate의 문서처럼 ... 나는 이전의 대답에서 그것을 제거했다. 대신 @Column (name = "Code", nullable = false, unique = true)과 같은 주석을 추가하는 방법은 무엇입니까? – Ori

+0

이것은 xml 매핑 자연 ID와 일치하지 않습니다. xml 매핑 natural-id는 not null 컨 스트레인 트를 생성합니다. –

관련 문제