2013-03-28 3 views
2

고유 ID가 d1Id 인 기본 테이블이 있습니다. d1Id는 D1 레코드를 고유하게 식별하며 테이블의 기본 키이기도합니다. 나는 기본 키로 d2seq을 가지고있는 D2 인 테이블 2를 가지고 있지만 D2는 또한 외래 키 제약 조건을 가지고있는 고유 한 d1Id를 가지고있다. 그러나 나는 그것이 유일하고 이드의 것이 확실하다는 것을 확실히 알고 있습니다. 내가 최대 절전 모드를 사용하여 D1 호출을 할 때 d2 값을 가져 오려고 노력 중이며 컴파일 타임 오류가 발생하면서 올바른 hbm을 얻을 수 없습니다.외래 키에 일대일 최대 절전 모드

문제의 핵심은 2 개의 테이블 사이에 일대일 관계를 설정해야하는데 두 번째 테이블에서 조인 할 ID는 테이블의 기본 키가 아닙니다. 모든 예제는 Google 검색을 본 적이 두 번째 테이블의 ID도 두 번째 테이블의 기본 키입니다 사건을했습니다. 지금 가지고있는 HBM 파일을 보여 드리겠습니다. D2에 대한 내 두 번째 HBM에서

<hibernate-mapping default-lazy="true" 
package="com.xxx.xx.customer.dto"> 
<class name="D1" table="D1" dynamic-update="true"> 
    <id name="dString" column="DID" type="java.lang.String" 
     unsaved-value="null" length="9"> 
     <generator class="assigned"/> 
    </id> 
... 

<one-to-one name="d2" class="com.xxx.xx.customer.dto.D2" > 
     <!-- column name="d1Id" /--> 
    </one-to-one> 

, 난 여기 갇혀있어

<hibernate-mapping default-lazy="true" package="com.xxx.xx.customer.dto"> 
<class name="D2" table="D2" dynamic-update="true"> 
    <id name="id" column="D2ID" type="integer"> 
     <generator class="native"> 
      <param name="sequence">D2SEQ</param> 
     </generator> 
    </id> 

<id name="d1id" column="D1ID" type="java.lang.String" 
     unsaved-value="null" length="9"> 
     <generator class="assigned"/> 
    </id> 
>는 기본 키 및이 아니다 일 때문에 분명 여기 d1id의 두 번째 id 필드를 사용할 수 없습니다

> 나는 이미 전에 그것을 사용했습니다. 그렇다면이 HBM 파일은 어떻게 작동해야합니까?

HBO를 제 위치에 갖게되면 DTO를 통해 D1을 쿼리하는 동안 D2 정보를 얻고 싶습니다. 어떻게해야합니까?

답변

0

@ManyToOne 관계를 사용할 수없는 이유는 무엇입니까? 종종 더 많은 유연성을 제공합니다. @OneToOne

관련 문제