2014-12-08 3 views
1

우리는 주 제품 및 주 제품과 똑같은 방식으로 작동하는 다른 하위 제품이있는 시나리오를 가지고 있습니다. 주요 제품은 최대 하나의 하위 제품을 가질 수 있습니다. 사용자가 주요 제품을 선택할 때마다 가능한 경우 사용자 하위 제품이 표시됩니다. 나는 null가됩니다 parentProduct 주요 제품의 (yes..we 여전히 XML을 사용하여)동일한 테이블에서 최대 절전 모드 일대일 매핑

<one-to-one name="parentProduct" class="uk.co.xxx.domain.Product" cascade="save-update" foreign-key="PARENT_PRODUCT_ID"/> 

같은 방법으로

public class Product { 
... 
    private Product parentProduct; 

처럼 및 최대 절전 모드 매핑 XML에 설계했다.

일기와 날씨가 맞는지 잘 모르겠습니다. 아직 제품을 저장하려고하지 않았습니다.

그런 디자인에 대한 제안 사항이 있습니까? 하위 제품이 주 제품의 많은 특성을 공유하고 제품 자체가 생성 될 때 코드 및 잠재적 버그가 중복되는 것과 같은 몇 가지 잠재적 인 결함을 봅니다. 그러나 하위 제품에 대한 별도의 테이블을 피함으로써 기존의보고 코드 변경, 제품 테이블을 사용하는 배치 등을 피할 수있었습니다.

답변

1

이렇게하면됩니다. 복사 생성자에서 부모와 공유하는 속성을 설정할 수 있습니다 (하위 제품을 만들거나 상위 제품을 생성자 매개 변수로 전달하거나, 필요한 항목을 복사하거나, 부모를 parentProduct으로 설정).

대체는 SubProduct extends Product 일 수 있지만 TABLE_PER_CLASS이 아닌 SINGLE_TABLE 상속 전략을 사용합니다. dtype 열 (이미 가지고있는 외래 키 열 포함)을 Product 테이블에 추가하기 만하면 어떤 제품이 주 제품이고 어떤 제품이 아닌 제품인지 알 수 있습니다. 기존 데이터가 이미있는 경우 dtype의 값을 업데이트해야합니다.

1

동일한 문제가 있습니다. DB의 디자인을 변경하지 않고도 양방향 일대일 관계가 필요합니다. 나는 동일한 테이블에 제품과 하위 제품 (동일한 유형의 80 %의 데이터를 공유 함)의 관계를 저장하려고합니다. 나는이 관계를 유일 제약 (one-to-one의 동일 함)을 가진 many-to-one으로 표현하기로 선택한다.

<hibernate-mapping package="com.my.package" > 
<class name="Product" table="PRODUCT" > 
    <!-- Class Cache --> 
    <cache usage="nonstrict-read-write"/> 
    <id name="id" type="java.lang.Long"> 
     <column name="ID" precision="12" scale="0" /> 
     <generator class="sequence"> 
      <param name="sequence">PRODUCT_SEQ</param> 
     </generator> 
    </id> 
    ... 
    <many-to-one name="parentProduct" not-null="true" foreign-key="ID" class="com.my.package.Product" column="PARENT_PRODUCT_ID" cascade="save-update" unique="true" fetch="select" /> 
    ... 
</class> 

이 솔루션

양방향 관계를 오히려 잘하지만 아니다. 나는 아이로부터 부모를 찾는 것이 간단하지만 그 반대는 아닙니다.

Order.List<Products> 
Product_1 -> null 
Product_2 -> Product_1 
... 

Product_1에 전체 제품 목록을 검사 할 때마다 java cicles를 실행하는 대신 Product_1에 자식이 있는지 알 수있는 방법이 있습니까?

이 솔루션이 어떻게 든 완료되지는 않았지만 도움이되기를 바랍니다.