hybris中关系和集合之间的区别?

hybris中关系和集合之间的区别?,hybris,Hybris,我不熟悉hybris,什么是差异b/w关系和集合,为什么我们选择关系而不是集合。在集合中,我们的大小有限,如果我们尝试插入更多数据,它将被截断。 关系我们可以使用n个数据 集合比关系快,但在集合中,我们只能使用一对多关系,对于多对多,我们应该只使用关系….添加到Raghav添加的内容中,集合内部存储为单个列中PKs的csv。因此,任何数据库中的字段长度限制都会导致大小限制 但是,关系可以存储在单独的表中,因此可以进行无限映射。重要的是要了解hybris强烈反对使用集合,而是使用关系 如上所述,集

我不熟悉hybris,什么是差异b/w关系和集合,为什么我们选择关系而不是集合。

在集合中,我们的大小有限,如果我们尝试插入更多数据,它将被截断。 关系我们可以使用n个数据


集合比关系快,但在集合中,我们只能使用一对多关系,对于多对多,我们应该只使用关系….

添加到Raghav添加的内容中,集合内部存储为单个列中PKs的csv。因此,任何数据库中的字段长度限制都会导致大小限制


但是,关系可以存储在单独的表中,因此可以进行无限映射。

重要的是要了解hybris强烈反对使用集合,而是使用关系

如上所述,集合被维护为逗号,与数据结构分隔开来,这就是为什么您可能会看到数据截断的问题,其中As关系具有创建新表和映射表以连接两个表的合理数据结构

集合,因为存在存储结构-无法搜索

我想说,对于一个非常简单(1:n)的关系,数据有限,您仍然可以使用集合。而对于任何复杂的(m:n/1:n)关系,始终使用关系集合 集合层次结构中的根接口

集合表示一组对象,称为其元素

某些集合允许重复元素,而其他集合则不允许

有些是有序的,有些是非有序的

要真正了解每个集合的用途及其性能特征,我建议您了解数据结构,如数组、链表、二进制搜索树、哈希表以及堆栈和队列。如果你想成为一名任何语言的有效程序员,学习这一点是不可替代的


HashMap仅在有逻辑原因需要将与值相对应的特殊键作为序列化对象保存在DB中的单个列中时才真正使用

关系以通常的关系数据库方式持久化-在另一个表或链接表上使用外键(取决于关系的基数)

不鼓励使用集合类型,因为它们无法使用flexiblesearch进行搜索,并且在处理多个对象的集合时有很大的性能限制。

如Sumit所述

不鼓励使用CollectionType,应尽可能使用RelationType。这是因为CollectionType的数据库字段的最大长度是有限的,并且具有多个值的CollectionType可能最终会截断其值。此外,CollectionTypes的值以CSV格式写入,而不是以规范化的方式写入。因此,hybris建议尽可能使用RelationType

  • 集合类型:集合类型基于Java集合类,即集合是元素列表。
    1:n-通过源项上的属性(例如,主键列表)保留指向相应值的链接。
    n:1将属性值存储在相应的目标项中,并在源类型中使用getter方法来检索值
  • 关系类型:
    n:m-在内部,关系两侧的元素通过名为LinkItem的助手类型的实例链接在一起。 LinkItems包含两个属性,SourceItem和TargetItem,这两个属性 对相应项目的参考

对于关系中的每个条目(换句话说,对于从一个项目到另一个项目的每个链接),都有一个LinkItem实例,用于存储相关项目的PK。LinkItem实例由平台透明自动处理:在API级别,您只需要使用各自的getter和setter方法。

基本上,在hybris中有两种技术上不同的集合建模方法:

  • 集合类型

    • 可以将hybris中的CollectionTypes想象为一个装在一台打字机上的背包
    • 通过运行时,CollectionTypes被解析为一类项的集合,例如MediaModels列表
    • 可能导致溢出,导致截断,从而导致数据丢失
    • 搜索更困难,性能更低
    • 在数据库级别,CollectionTypes是以逗号分隔的PK列表,因此存在一个最大值
  • 关系类型

    • 在所有类型之间创建链接创建类型安全的n-to-m关系:仅链接在关系中声明的源/目标类型的此类元素
    • 关系的值存储在单独的数据库表中 +每个值都存储在单独的表行中

  • 我完全同意@KilleKat的评论,他提到了Hybris中CollectionType和RelationType之间的所有差异

    我在下面附上了一些图表,以便更清楚地了解这个主题

    收集类型:(要明智地使用)

    关系类型:(推荐)

    hybris中集合和关系的确切区别是:

    “如何将数据存储在这两个数据库中”

    在集合中,将在表(项)中创建一个新列,其中包含列表元素的以逗号分隔的主键。实际列表元素存储在另一个表中

    在关系中,将创建一个新表作为两种项目类型之间的链接表


    您可以阅读完整的差异。

    一对多关系可以通过收集和关联以及

    为什么在某些情况下,在Hybris中,收集优先于关系

    收藏-a
    <collectiontype code="AddressCollection" elementtype="Address" autocreate="true" generate="false"/>
    
    <itemtype code="User"
                  extends="Principal"
                  jaloclass="de.hybris.platform.jalo.user.User"
                  autocreate="true"
                  generate="true">
            <deployment table="Users" typecode="4" propertytable="UserProps"/>
            <attributes>
               <attribute autocreate="true" qualifier="addresses" type="AddressCollection">
                 <modifiers read="true" write="true" search="false" optional="true" partof="true"/>
                 <persistence type="jalo"/>
               </attribute>
            </attributes>
        </itemtype>
    
    <relation code="User2Orders" generate="true" localized="false" autocreate="true">
            <sourceElement type="User" cardinality="one" qualifier="user">
                <modifiers read="true" write="true" search="true" optional="false"/>
            </sourceElement>
            <targetElement type="Order" cardinality="many" qualifier="orders">
                <modifiers read="true" write="true" search="true" optional="true" partof="true"/>
            </targetElement>
        </relation>