2012-09-20 17 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的事務處理程序中添加邏輯。在此事務處理程序中,您可以檢索Join_Store的條目以複製AP_Store的條目。

您首先需要通過添加用於區分重複項的新字段來更改AP_Store項。

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 

爲您的交易處理程序,你可以注入StoresUniverse,以便檢索您的Join_Store,然後使用上Join_Store的SOME_ID值檢索重複的次數做搜索,你需要創建:

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

要加入你的AP存儲到joiningStore,你需要給出一套在兩家商店之間通用的領域。這些字段不存在任何限制,這些字段是每個商店的關鍵字段。

然後,如果您的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