최대 절전 모드에 문제가 있습니다. 자연 복합 기본 키가있는 테이블에 매핑 된 엔터티가 있습니다. 기본 키는 필수 코드와 날짜 또는 기간 ID (선택 사항)로 구성되어 있으므로 date와 period_id는 상호 배타적입니다.Hibernate : 합성 자연 기본 키의 선택적 속성
<composite-id name="myEntity" class="myEntity">
<key-property name="code" column="bookcode" />
<key-property name="period" column="PRD_ID" />
<key-property name="pDate" column="PNL_DT"/>
</composite-id>
그러나 날짜가 널 (null)이 아닌 myEntity에 쿼리를 수행하고, 기간이 null myEntity 개체를 채우는 데 실패 내가 (예, 아직 우리에 대한 주석)처럼되지 내 HBM에 매핑. 왜 실패했는지는 알 수 없지만, 기간에 대한 NULL 값이 반환 된 후 최대 절전 모드가 반환 된 특성을 로깅하는 것을 멈출 수 있습니다.
org.hibernate.type.NullableType.nullSafeSet:151 - binding '1157' to parameter: 4
org.hibernate.type.NullableType.nullSafeGet:193 - returning '1157' as column: LVE1_69_
org.hibernate.type.NullableType.nullSafeGet:187 - returning null as column: PRD2_69_
END OF LOGGING
PeriodId 키 속성을 제거하면 문제가 발생하고 myEntity는 성공적으로 채워집니다.
org.hibernate.type.NullableType.nullSafeSet:151 - binding '1156' to parameter: 4
org.hibernate.type.NullableType.nullSafeGet:193 - returning '1156' as column: LVE1_69_
org.hibernate.type.NullableType.nullSafeGet:193 - returning '2012-04-06 00:00:00' as column: PNL2_69_
org.hibernate.type.NullableType.nullSafeGet:193 - returning '1156' as column: LVE1_69_
LOTS MORE RETURNING lines.
키 속성에 not-null = "false"속성이 있다고 의심되지만 문서에서 찾을 수 없습니다.
코드가 고유하지 않습니다. period_id 또는 날짜의 조합은 고유합니다. 데이터베이스의 유효한 고유 제한 조건 . 따라서 composite_id는 null이 아니며 하나의 선택적 (Null 가능) 속성으로 구성됩니다. –
하지만 NHibernate의 id와 같은 유효한 기본 키가 아닙니다. 또한 null이있는 열에 대한 고유 한 제약 조건이 null이 제거 될 때까지 비활성화 된 postgres에 한 번 문제가 발생했습니다. – Firo
반품 주셔서 감사합니다. 선택적 속성이있는 복합 ID가 유효한 기본 키인지 여부는 확실하지 않습니다. 이 경우 레코드가 어디에서도 참조되지 않으므로 기본 키는 실제로 필요하지 않습니다. BTW 나는 대리 자동 증가 PK를 추가하여 문제를 해결했지만 여전히 당신의 데이터 모델을 오염으로 볼 수 있습니다. –