2017-04-08 47 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的版本,它可能会改变。无论如何,第二个例子不是最好的,因为不应该再使用集合。 –