【发布时间】:2017-09-04 01:48:31
【问题描述】:
如何使用灵活搜索查看Hybris中Collection类型存储的数据列表?
我在某处读到它以 PK 的形式存储,所以是否可以以某种方式对其进行解析?
【问题讨论】:
标签: hybris
如何使用灵活搜索查看Hybris中Collection类型存储的数据列表?
我在某处读到它以 PK 的形式存储,所以是否可以以某种方式对其进行解析?
【问题讨论】:
标签: hybris
**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} , '%' ) )
}
【讨论】:
您可以尝试以下方法。 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}"");"
【讨论】:
它记录在 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} , '%' ) )
}
【讨论】:
“CollectionTypes 基于 Java Collection 类。”
CollectionType 数据库字段的最大长度是有限的,因此它的值可能会由于许多记录而被截断。此外,CollectionTypes 的值是以 CSV 格式而不是以规范化的方式编写的。 Hybris 建议尽可能使用 RelationTypes 而不是 CollectionType。
集合如何存储值:
优势:
缺点:
如果集合中包含大量 PK,则字段值可能会达到数据库实现的最大字段长度,并且条目可能会被截断。
由于数据库条目仅包含 PK,而不包含项目,因此您无法直接对条目运行数据库搜索。相反,您需要通过 Java 在内存中运行搜索,这通常比直接在数据库中搜索要慢。
【讨论】: