2016-06-20 11 views
-1

지금 당장 붙어있어 도움이 필요합니다.PK가 아닌 다른 필드에서 최대 절전 모드로 매핑

SELECT * 
    from Category as a 
    Join Product as b on a.categoryBusinessRef = b.categoryBusinessRef 

을하지만, 최대 절전 모드에서 나를합니다

나는

Table Category (
    catId Numeric(10), 
    categoryBusinessRef Numeric(10) 
) 


Table Product (
    productId Numeric(10), 
    categoryBusinessRef Numeric(10) 
) 

SQL 쿼리가 될 것이라고 두 테이블 중 하나에 PK되지 않은 2 개 필드 사이에 최대 절전 모드에서 매핑을 가지고 싶어 이 매핑

SELECT * 
    from Category as a 
    Join Product as b on a.categoryId = b.categoryBusinessRef 

내 hbms이 좋아하는

를 찾습니다
<class name="Category" table="A"> 
     <id name="categoryId" length="10"> 
      <column name="categoryid" /> 
      <generator class="sequence"> 
       <param name="sequence">S_category</param> 
      </generator> 
     </id> 
     <set name="categoryBusinessRefs" table="B" > 
      <key> 
       <column name="categoryBusinessRef" /> 
      </key> 
      <one-to-many class="ProductClass" /> 
     </set> 
</class> 

<class name="Product" table="B"> 
     <id name="productId" length="10"> 
      <column name="productid" /> 
      <generator class="sequence"> 
       <param name="sequence">S_product</param> 
      </generator> 
     </id> 
     <property name="categoryBusinessRef" length="10"> 
      <column name="categoryBusinessRef" /> 
     </property> 
</class> 

는 그래서는 일대 다 관계입니다 그러나 그것은 도움

편집에 범주의 PK로 다른 값으로

감사를 매핑해야합니다 : '내가 할 수있는 경우

그거 하지마! 하지만 그렇게하고 싶다면 기본 키를 사용하여 모든 것을 알고 있지만 내 질문은 "PK에 대한 최대 절전 모드에서 매핑"이 아니라 "PK 이외의 다른 필드에서 최대 절전 모드로 매핑"이 아니므로 맵 PK에 관심이 없다 : p

+0

'A'테이블이 OneToMany 관계의 '1'면인 것 같습니까? 맞습니까? 그러면 'A'테이블의 'disc'속성이 잘못되었습니다. – JimHawkins

+0

나는 상품명을 선택하지 않았다. 나는 그 변수의 이름을 바꿀 것이다. –

+0

좋은 이름이나 나쁜 이름이 아니다. 내 가정이 맞습니까? – JimHawkins

답변

1

Cartesian 제품을 원한다면 모델이 잘못되었다. (드물기 때문에) 항상 기본 키로 결합해야한다.

일대일, 일대 다 또는 다 대다 관계를 가질 수 있습니다 (마지막 두 가지는 더 일반적입니다).

1 대 다수의 경우 many쪽에 one 쪽의 pk가 필요합니다.

많은 경우 매핑을 만드는 관계 테이블이 필요합니다.

많은 B이 동일한 A (일대 다)에 연결되기를 원한다고 가정합니다.

CREATE TABLE a (
    id NUMERIC(10) PRIMARY KEY, 
    disc NUMERIC(10) NOT NULL 
) 

CREATE TABLE b (
    id NUMERIC(10) PRIMARY KEY, 
    a_id NUMERIC(10) NOT NUL REFERENCES a (id) 
) 

이제

SELECT * 
FROM a 
JOIN b ON b.a_id = a.id 

을 조회하고 모든 b에 대해 적절한 관계와 a에서 모든 디스크를 복구 할 수 있습니다.

+0

그래도 매핑해야한다. 데이터베이스의 Historisation 때문에 다른 필드는 모든 업데이트가 새로운 레코드를 필요로하기 때문에 행에 대한 ID와 비즈니스 데이터에 대한 ID가 표시됩니다. –

+0

그러나 많은 경우에 특정 값으로 매핑해야합니다. –

+0

@GillesBodart PK는 튜플을 고유하게 식별해야하므로 모든 매핑이 PK에 의해 수행되므로 비 PK 필드에 대해서만 제한 작업을 적용해야합니다. 큰 데이터는 필수적으로 (예를 들어 큰 데이터 목적으로) 기본 키가 아닙니다. 관계형 데이터베이스 –