2011-08-29 6 views
3

하나의 엔티티 "B"와 일대 다 관계 (1 : n)가있는 엔티티 "A"가 있습니다. 불행히도 (년 동안 존재하는) 데이터베이스는 A의 기본 키에 대해 B의 열을 NOT NULL로 정의하지만 관계는 필수는 아닙니다. 따라서 Emtity A가 관련되지 않으면이 열은 단순히 -1을 얻습니다.JPA 관계에서 NULL로 처리되는 값을 설정하는 방법

어떻게 이것을 JPA/Hibernate에서 매핑 할 수 있습니까? 다음과 같은 예외가 발생합니다.

Exception in thread "main" 
javax.persistence.EntityNotFoundException: 
Unable to find A with id -1 

저는 이것이 맞지만 해결 방법이있을 수 있습니다.

그리고 당신은 B.a 특성에 @NotFound(action = NotFoundAction.IGNORE) 주석을 사용할 수

답변

0

:-) 데이터 모델을 위해 저를 비난하지 마십시오. 그러나 이것은 협회를 읽을 때만 작동합니다. B.a을 null로 설정하고 데이터베이스에 null 대신 -1을 삽입하게하려면 잘 모르겠다.

+0

'@ NotFound' 주석은 이러한 엔티티와 릴레이션을로드하는 데 도움이됩니다. 이제는 상속을 사용하여 NULL-Assignments를 수정했습니다. ExplicitObject.setRelation (relObj)는 내부적으로'AbstractParent.setRelationId (relObj == null? -1 : relObj.getId())'를 호출합니다. JPA/Hibernate가 일을 단순화하는 방법 –

0

나는 년과 년 후에 데이터 모델을 거꾸로 돌리는 것이 공원에서 걷는 것이 아니라는 것을 알고있다. 특히 연결된 모든 응용 프로그램의 모든 구석을 조사해야 영향을 받는지 확인해야하기 때문에 특히 그렇습니다. 이것은 외래 키이므로 기회를 변경하면 사물의 많은 부분에 영향을 미칠 수 있습니다. 아직도 당신이 액세스 보존

  • 이하자 현재의 데이터 모델을 몇 가지 구조를 사용하는 방법에 대한 담당 DBA 이야기 wellworth 수 있습니다 말했다

    그 다른 방법

데이터

오라클 데이터베이스 (최근 버전)에는 업데이트 가능한보기 및 의사 열 및 기타 등의 옵션이 있습니다. 나는 나 자신을 DBA가 아니에요하지만 난 제외 열 (테이블/엔티티 A)을 향해 외래 키의 사본으로 서 것, 예를 들어 의사 컬럼의 사용에 약간의 잠재력을 그것이 것

  • 당신이 당신의 최대 절전 모드/JPA를 변경하는 경우

(아마도 트리거를 사용하여)

  • 가 null 값의 삽입이가 참조하는 열에서 -1로 번역되어 있는지 확인합니다 널 (null)로 모든 -1 값을 표시 원래 열 대신 해당 열을 사용하도록 설정 ..

    난 그냥 h ope를 사용하면 경험이있는 DBA가 있으며, 더 중요한 것은 실험 환경에 대한 두려움이 없습니다.

    행운을 빈다. Wim

  • 관련 문제