【问题标题】:Reading collection type data using Flexible search使用灵活搜索读取集合类型数据
【发布时间】:2017-09-04 01:48:31
【问题描述】:

如何使用灵活搜索查看Hybris中Collection类型存储的数据列表?

我在某处读到它以 PK 的形式存储,所以是否可以以某种方式对其进行解析?

【问题讨论】:

标签: hybris


【解决方案1】:
**Use the below logic if there is any attribute relationship mapping between two tables:**

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

**Use the below if there is no mapping between two tables:**

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

【讨论】:

    【解决方案2】:

    您可以尝试以下方法。 vendorCodes 是列表。

    INSERT_UPDATE B2BCustomer;pk[unique=true];uid;vendorCodes
    "#% impex.exportItemsFlexibleSearch(""select {c.pk},{c.uid},{c.vendorCodes} from {B2BCustomer as c} order by {c.pk}"");"
    

    【讨论】:

    • 欢迎来到 SO!请确保下次您正确排版您的答案。
    【解决方案3】:

    它记录在 FlexibleSearch Tips and Tricks - 灵活的搜索和集合

    您有 Orders 和 VoucherCard 的情况。这是一个示例,其中集合元素类型具有对包含集合的项目的引用(凭证卡作为订单的参考)

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

    那么你就有了元素和支架之间没有参考的情况。您可以根据集合属性存储为 PK 列表这一事实使用一些解决方法:

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

    【讨论】:

    • 我测试了集合查询(第二个),但它不工作。在 items.xml 中,supportedpaymentmodes 有修饰符 search="false"。不知道是我做错了什么,还是 wiki 的查询有误。
    • 确实,“搜索”属性文档说 -->“定义此属性是否可以通过 FlexibleSearch 搜索。根据 hybris 版本,它可能会发生变化。无论如何,第二个示例不是最好的,因为集合应该不再使用了。
    【解决方案4】:

    “CollectionTypes 基于 Java Collection 类。”

    CollectionType 数据库字段的最大长度是有限的,因此它的值可能会由于许多记录而被截断。此外,CollectionTypes 的值是以 CSV 格式而不是以规范化的方式编写的。 Hybris 建议尽可能使用 RelationTypes 而不是 CollectionType。

    集合如何存储值:

    1. 如果 CollectionType 包含 AtomicTypes,则这些值将作为二进制字段存储在数据库中。
    2. 如果 CollectionType 存储项目集合,则项目的主键 (PK) 以字符串形式(PK 列表)存储在数据库中。

    优势:

    1. 由于一个 CollectionType 实例的所有值都存储为一个字段,因此读取和写入值非常快,因为它是在单个数据库访问中完成的(尤其是缓存)。

    缺点:

    1. 如果集合中包含大量 PK,则字段值可能会达到数据库实现的最大字段长度,并且条目可能会被截断。

    2. 由于数据库条目仅包含 PK,而不包含项目,因此您无法直接对条目运行数据库搜索。相反,您需要通过 Java 在内存中运行搜索,这通常比直接在数据库中搜索要慢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-21
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多