2012-09-20 2 views
3

관계형 상점을 사용하면 ActivePivot 저장소에서 가입 저장소로 일대 다 조인을 수행 할 수 있습니까? 내 ActivePivot 저장소가 SOME_ID의 다른 저장소에 조인한다고 가정하지만 다른 저장소의 키는 SOME_ID, SOME_TYPE입니다. 그런 다음이 가능합니다 : 그러나관계형 상점 조인을 구성 할 때 ActivePivot 저장소에서 일대 다 조인을 수행 할 수 있습니까?

AP_STORE SOME_ID | JOIN_STORE SOME_ID | JOIN_STORE SOME_TYPE 
------------------------------------------------------------ 
     1   |  1    | TYPE1 
     1   |  1    | TYPE2 

의 합류 저장소에 고유 항목이 없기 때문에, 다음과 같은 오류가 발생, 시도 가입하기 :

Caused by: com.quartetfs.fwk.QuartetRuntimeException: Impossible to find exactly 1 entry from store with key: Key 

내가 볼 수있는 거기에 문제가있는 이유는 AP 저장소에 하나의 레코드가 실제로 조인 저장소의 각 레코드에 참여하는 두 개의 개별 레코드가되어야하기 때문입니다. 그러나 JOIN_STORE : SOME_TYPE도 그렇지 않으면 발생하지 않을 것입니다. AP 저장소의 필드

AP 저장소에서 이러한 일대 다 조인을 수행하는 방법이 있습니까?

감사

편집 : 명확하게하기 위해, SOME_TYPE은 (심지어 다른 이름 아래) AP 저장소에 존재하지 않습니다. 모든 공통 필드에 가입했지만 참여 상점에 일치하는 항목이 두 개 이상 있습니다. 일치하는 항목은 일반적인 것이 아니고 AP 저장소에 존재하지 않는 필드에서 다릅니다. 나는 (심지어 다른 이름)가 AP 저장소에 존재하지 않는 외래 키를 추가하려고하면

, 내가 얻을 :

Caused by: com.quartetfs.fwk.QuartetRuntimeException: com.quartetfs.fwk.AgentException: On join 'AP_STORE=>JOIN_STORE' the store 'AP_STORE' does not contain the foreign key 'FIELD_ONLY_IN_JOIN_STORE' in its fields: 
+0

필자는 AP 저장소에 항목을 병합 할 때 모든 열이 아닌 가입 저장소의 추가 키만 병합하여이 작업을 수행 할 수 있음을 알았습니다. 그런 다음 키의 조합에 대해 정기적 인 관계형 저장소 조인을 수행하여 중복을 피함으로써 잠재적으로 많은 메모리를 절약 할 수 있습니다. – doc

답변

3

관계형 저장소 조인은 데이터를 복제하지 않습니다. 관계형 상점의 조인을 사용하여 하나의 항목을 여러 상점에 조인 할 수 없습니다. 관계형 상점과 함께 다중 생성 계산기를 사용할 수 없습니다.

프로젝트 아키텍처 및 워크 플로에 따라 AP_Store를 공급하는 데 사용되는 트랜잭션 처리기에 논리를 추가하는 것을 고려할 수 있습니다. 이 트랜잭션 처리기에서 AP_Store의 항목을 복제하기 위해 Join_Store의 항목을 검색 할 수 있습니다.

먼저 중복 된 항목을 구분하는 데 사용되는 새로운 입력란을 추가하여 AP_Store 키를 변경해야합니다.

: 당신은 당신이 만들어야합니다 중복의 수를 검색 할 Join_Store에 SOME_ID 값을 사용하여 검색을 수행 한 후 Join_Store를 검색하기 위해 StoresUniverse를 삽입 할 수 있습니다 트랜잭션 처리기에 대한

AP_STORE SOME_ID | AP_STORE SOME_DUPLICATE_ID |JOIN_STORE SOME_ID | JOIN_STORE SOME_TYPE 
    -----------------------------------------------------------------------------------------   
      1   |   1    |   1   |  TYPE1 
      1   |   2    |   1   |  TYPE2 

IRelationalStore joinStore = storeUniverse.get("Join_Store"); 
    List<IRelationalEntry> joinEntries = joinStore.search("SOME_ID",apStoreObject.get("SOME_ID")); 
    for(int i = 0; i < joinEntries.size(); i++) { 
     // Clone apStoreObject, add a SOME_DUPLICATE_ID value and add it to the list of objects to add in your AP_Store 
    } 
0

가 joiningStore에 AP 스토어에 가입하려면 다음을 수행해야 2 개 점포 사이에 공통된 일련의 필드를 제공하십시오. 이 필드는 각 상점의 키 필드가되는 제약이 없습니다.

그런 다음 AP 저장소에 SOME_TYPE을 나타내는 입력란이있는 경우 외부 키로 추가하기 만하면됩니다.

<property name="joins"> 
    <list> 
     <bean class="com.quartetfs.tech.store.description.impl.JoinDescription"> 
      <property name="targetStoreName" value="JoiningStore" /> 
      <property name="foreignKeys" value="SOME_TYPE" /> 
     </bean> 
    </list> 
</property> 

필드가 결합 된 저장소와 결합 저장소에 다른 이름이있는 경우, 당신은 결합 필드에 합류 가게 외래 키 및 관련 필드 사이의 관계를 설명하는지도를 사용할 수 있습니다

<property name="joins"> 
    <list> 
     <bean class="com.quartetfs.tech.store.description.impl.JoinDescription"> 
      <property name="targetStoreName" value="JoiningStore" /> 
      <property name="foreignKeyMap" > 
       <map> 
         <entry key="AP_SOME_TYPE" value="SOME_TYPE" /> 
       </map> 
      </property> 
     </bean> 
    </list> 
</property> 
+0

불행히도, 나는 이것이 내 질문에 답하지 않는다고 생각합니다. 위의 내 질문 편집을 참조하십시오. – doc