2017-04-08 75 views
0

如何使用靈活搜索來查看Hybris中收集類型中存儲的數據列表?使用靈活搜索讀取收集類型數據

我已經讀過它存儲爲PK的地方,所以有可能以某種方式解析它?

+0

看看這裏:http://stackoverflow.com/questions/28230779/difference-between-relations -and-collections-in-hybris/37239837#37239837 – KilleKat

回答

1

「CollectionTypes基於Java Collection類。」

CollectionType數據庫字段的最大長度是有限的,所以有可能會得到它截斷值的機會,由於多條記錄。另外,CollectionType的值以CSV格式寫入,而不是以規範化的方式寫入。 Hybris建議儘可能在CollectionType上使用RelationTypes。

集合存儲如何值:

  1. 如果CollectionType包含AtomicTypes,該值存儲在數據庫中的二進制字段。
  2. 如果CollectionType存儲項目集合,則項目的主鍵(PK)以字符串形式(PK列表)存儲在數據庫中。

enter image description here

優勢:

  1. 作爲一個CollectionType實例的所有值存儲爲一個單獨的領域,閱讀和寫作的價值是相當快的,因爲它在完成一個數據庫訪問(特別是使用緩存)。

缺點:

  1. 如果一個集合包含了很多的PK中,字段值可能達到字段的最大長度爲數據庫實施和項目可能會被截斷。

  2. 由於數據庫條目僅包含PK,而不是項目,因此無法直接在條目上運行數據庫搜索。相反,您需要通過Java在內存中運行搜索,這通常比直接在數據庫上搜索要慢。

0

它記錄在FlexibleSearch Tips and Tricks - 靈活的搜索和收藏

你有訂單和VoucherCard的情況。這也正是集合元素類型必須持有集合(該vouchercards作爲裁判的順序)

SELECT {vc.PK}, {vc.price} 
FROM 
{ 
    Order AS o JOIN VoucherCard AS vc 
    ON {vc.order}= {o.pk} 
} 
WHERE {o.PK} = ?order 

那你有沒有情況元件和持有人之間的參考項目的引用的爲例。您可以使用基於該集合屬性存儲爲PK s的名單事實上,一些解決方法:

SELECT {dm.code}, {pm.code} 
FROM 
{ 
    DeliveryMode AS dm JOIN PaymentMode AS pm 
    ON {dm.supportedpaymentmodes} LIKE CONCAT('%', CONCAT({pm.PK} , '%')) 
} 
+0

我測試了集合(第二個)的查詢,但它不工作。在items.xml中,supportedPaymentmodes有修飾符search =「false」。不知道是我做錯了什麼,或者wiki有錯誤的查詢。 – Evgenii

+0

事實上,「搜索」屬性doc說 - >「定義該屬性是否可以通過靈活搜索來搜索。根據hybris的版本,它可能會改變。無論如何,第二個例子不是最好的,因爲不應該再使用集合。 –